4.5 如果類包含另乙個類的物件,那麼包含類應當向被包含的物件傳送訊息(呼叫方法)。
也就是說,所有的包含關係都應當是使用關係。
如果不是這樣,那麼包含的類有什麼用處呢?當然,面向過程的開發人員會想到可能有乙個get方法供其它類使用這個包含的物件,那麼按照「資料隱藏原則」,為什麼
不讓使用包含類的類直接包含被包含的這個物件呢?包含乙個物件一定是需要使用它才包含。
比如說汽車包含了發動機,如果違背這條原則的話則定義如下:
class 汽車
}//對於使用駕駛員來說,汽車的操作如下:
發動機 a=汽車a.get發動機();
a.啟動();
對駕駛員來說,就知道了「汽車裡有發動機」的內部細節(),這肯定是不合適的。
那麼我們應當將發動機的啟動操作由汽車類來呼叫,而不是駕駛員,那麼定義如下:
class 汽車
}//對於使用駕駛員來說,汽車的操作如下:
汽車a.啟動();
這樣對駕駛員來說,就不需要知道汽車細節了,也減少了與發動機的耦合關係。(默念一遍:低耦合,高內聚)
有乙個特殊點的情況,對於容器類來說,它的責任就是提供物件給使用者,所以違背這個原則是正常的,其它情況請遵守這條原則。
OOD沉思錄 之 類和物件的關係 使用關係
使用關係 物件a的方法methoda使用了b的方法methodb,則表示a對b存在使用關係 使用關係的最關鍵問題在於,a如何找到b,存在6種方案 方案一 a包含了b,b作為乙個成員定義在a的類中,那麼在methoda中可以直接呼叫b.methodb 如汽車可以包含車輪。但是汽車需要加油,那麼就需要呼...
C 之類和物件的關係
例1 附例1 小問學程式設計 例 設計乙個圓類。屬性 圓心座標 半徑。操作 對圓的資訊進行讀取 設定以及列印,計算兩個圓之間的距離。類 circle物件 c1 c2 關係 類是物件的抽象型別 物件是類的具體例項 示例分析 類中定義成員時被private修飾的成員為類的私有成員,類外不可見。被publ...
《C 沉思錄》將計數器和物件分離開
class point int x void const int y void const point x int xv point y int yv private int xval,yval class usecount usecount const usecount u p u.p useco...