OOD沉思錄 之 類和物件的關係 使用關係

2021-06-05 02:22:08 字數 1101 閱讀 2730

使用關係

物件a的方法methoda使用了b的方法methodb,則表示a對b存在使用關係

使用關係的最關鍵問題在於,a如何找到b,存在6種方案

方案一:

a包含了b,b作為乙個成員定義在a的類中,那麼在methoda中可以直接呼叫b.methodb()

如汽車可以包含車輪。

但是汽車需要加油,那麼就需要呼叫"加油站b.加油()"

class 汽車

}

那麼關鍵問題在於,汽車如何知道加油站x?

如果讓汽車包含加油站,肯定不合適,那麼還有以下5種方案:

方案二:

通過形參將加油站傳遞給呼叫的方法,那麼呼叫形式就是「加油站.加油()",那麼汽車的定義則如下

class 汽車

}

方案三:

通過乙個第三方類來獲得加油站,如地圖類,則汽車的定義如下:

class 汽車

}

方案四:

全世界只有乙個加油站,那麼所有的汽車都到這裡來加油,則汽車的定義如下:

class 汽車

}

這種情況就是單件模式的例子,還記得它嗎?

方案五:

對款爺來說,隨時修乙個加油站,加完油就推平,這種情況在大部分領域行不通(代價太高),但是在軟體領域可以(因為代價很低)

這種情況下,汽車的定義如下:

class 汽車

}

方案六:

汽車製造商在汽車的玻璃上明確標註了,此車只能在名叫"xx加油站",則汽車的定義如下:

class 汽車

}

這種方案,在有的地方叫弱引用,汽車並不直接包含加油站,但是包含加油站的乙個標示

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

4.5 如果類包含另乙個類的物件,那麼包含類應當向被包含的物件傳送訊息 呼叫方法 也就是說,所有的包含關係都應當是使用關係。如果不是這樣,那麼包含的類有什麼用處呢?當然,面向過程的開發人員會想到可能有乙個get方法供其它類使用這個包含的物件,那麼按照 資料隱藏原則 為什麼 不讓使用包含類的類直接包含...

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