java 核心技術(shù)-12版 卷Ⅰ- 4.1.4 類之間的關(guān)系
類之間最常見的關(guān)系有:
依賴(uses-a)
聚合(has-a)
繼承(is-a)
????依賴(dependence),即 uses-a 關(guān)系,是一種最明顯的也最一般的關(guān)系。例如,Order 類使用了Account 類,因為Order對象需要訪問 Account 對象來查看信用狀態(tài)。但是 Item 類不依賴于 Account類,因為Item 對象不需要考慮客戶賬戶。因此,如果一個類的方法要使用或操作另一個類的對象,我們就說前一個類依賴于后一個類。
????應該盡可能減少相互依賴的類。這里的關(guān)鍵是,如果類A 不知道類B 的存在,它就不會關(guān)心B的任何變化(這意味著B的改變不會在A中引入bug)。用軟件工程的術(shù)語來說,就是要盡可能減少類之間的耦合(coupling)。
????聚合(aggregation)即has-a 關(guān)系,很容易理解,因為這種關(guān)系很具體。例如,一個Order 對象包含一些Item對象。包含關(guān)系意味著類A 的對象包含類B的對象。
????注釋:有點方法學家不喜歡聚合這個概念,而更喜歡使用更一般的“關(guān)聯(lián)”關(guān)系。從建模的角度看,這是可以理解的。但對于程序員來說,“has-a”關(guān)系更加形象。我喜歡使用聚合還有另一個原因:關(guān)聯(lián)的標準記法不是很清楚,請參見4-1:

????繼承(inheritance),即 is-a 關(guān)系,表示一個更特殊的類與一個更一般的類之間的關(guān)系。例如,RushOrder 類繼承了Order 類。在特殊化的RushOrder 類中包含一些用于優(yōu)先處理的特殊方法,還提供了一個計算運費的不同方法;而其他的方法,如添加商品、生成賬單等都是從Order類繼承來的。一般而言,如果類D 擴展了類C,類D會繼承類C 的方法,另外還會有一些額外的功能(下一章將詳細討論這個重要的概念)。
????很多程序員采用UML(Unified Modeling Language,統(tǒng)一建模語言)繪制類圖,來描述類之間的關(guān)系。圖4-2 就是這樣一個例子。類用矩形表示,類之間的關(guān)系用帶有各種修飾的箭頭表示。表4-1給出了UML 中最常用的箭頭樣式。
