OOD沉思錄 之 類和物件的關係 包含關係1

2021-06-05 03:38:42 字數 741 閱讀 7885

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...