泛化、實現、依賴和關聯的區別


傳統應用程序設計中所說的依賴一般指“類之間的關系”,那先讓我們復習一下類之間的關系:
a、實現
表示類對接口的實現。
UML圖中實現使用一條帶有空心三角箭頭的虛線指向接口,如下:

b、泛化
表示類與類之間的繼承關系、接口與接口之間的繼承關系。
UML圖中實現使用一條帶有空心三角箭頭的實線指向基類,如下:

c、依賴
表現為函數中的參數(use a),是類與類之間的連接,表示一個類依賴於另一個類的定義,其中一個類的變化將影響另外一個類。例如如果A依賴於B,則B體現為局部變量,方法的參數、或靜態方法的調用。如電視(TV)依賴於頻道(channel)常見的依賴關系如下:
(1)類B以參數的形式傳入類A的方法。
(2)類B以局部變量的形式存在於類A的方法中。
(3)類A調用類B的靜態方法。
UML圖中實現使用一條帶有箭頭的虛線指向被依賴的類,如下:

d、關聯
表現為變量(has a),類與類之間的聯接,它使一個類知道另一個類的屬性和方法。例如如果A依賴於B,則B體現為A的全局變量,如person類和company類。

關聯關系有雙向關聯和單向關聯:
1、雙向關聯:兩個類都知道另一個類的公共屬性和操作。
2、單向關聯:只有一個類知道另外一個類的公共屬性和操作。
大多數關聯應該是單向的,單向關系更容易建立和維護,有助於尋找可服用的類。
UML圖中實現使用一條實線連接相同或不同類,如下:

e、聚合
是關聯關系的一種,是弱的關聯關系。聚合關系是整體和個體的關系。普通關聯關系的兩個類處於同一層次上,而聚合關系的兩個類處於不同的層次,一個是整體,一個是部分。同時,是一種弱的“擁有”關系。此時整體與部分之間是可分離的,他們可以具有各自的生命周期, 部分可以屬於多個整體對象,也可以為多個整體對象共享;比如計算機與CPU、公司與員工的關系等;表現在代碼層面,和關聯關系是一致的,只能從語義級別來區分。
UML圖中實現使用一條帶有虛心菱形的線來表示,如下:

f、組合
是關聯關系的一種,是比聚合關系強的關聯關系。它要求普通的聚合關系中代表整體的對象負責代表部分的對象的生命周期。Composition(組合關系)是一種強的“擁有”關系,體現了嚴格的部分和整體的關系,部分和整體的生命周期一致。他同樣體現整體與部分間的關系,但此時整體與部分是不可分的,整體的生命周期結束也就意味着部分的生命周期結束;比如你和你的大腦,window窗口和frame,在窗口中創建一個frame時必須把它附加到窗口上,當窗口消失時frame也就消失了;表現在代碼層面,和關聯關系是一致的,只能從語義級別來區分;
UML圖中實現使用一條帶有實心菱形的線來表示

幾種關系所表現的強弱程度依次為:組合>聚合>關聯>依賴

聚合和組合的區別:
聚合關系是“has-a”關系,組合關系是“contains-a”關系;聚合關系表示整體與部分的關系比較弱,而組合比較強;聚合關系中代表部分事物的對象與代表聚合事物的對象的生存期無關,一旦刪除了聚合對象不一定就刪除了代表部分事物的對象。組合中一旦刪除了組合對象,同時也就刪除了代表部分事物的對象。我們用淺顯的例子來說明聚合和組合的區別。“國破家亡”,國滅了,家自然也沒有了,“國”和“家”顯然也是組合關系。而相反的,計算機和它的外設之間就是聚合關系,因為它們之間的關系相對松散,計算機沒了,外設還可以獨立存在,還可以接在別的計算機上。在聚合關系中,部分可以獨立於聚合而存在,部分的所有權也可以由幾個聚合來共享,比如打印機就可以在辦公室內被廣大同事共用

聚合和組合的區別則在語義和實現上都有差別,組合的兩個對象之間其生命期有很大的關聯,被組合的對象是在組合對象創建的同時或者創建之后創建,在組合對象銷毀之前銷毀。一般來說被組合對象不能脫離組合對象獨立存在,而且也只能屬於一個組合對象,例如一個文檔的版本,必須依賴於文檔的存在,也只能屬於一個文檔。聚合則不一樣,被聚合的對象可以屬於多個聚合對象,例如一個員工可能可以屬於多個公司

關聯和聚合的區別:
關聯和聚合的區別主要在語義上,關聯的兩個對象之間一般是平等的,例如你是我的朋友,聚合則一般不是平等的,例如一個公司包含了很多員工,其實現上是差不多的。

---------------------------------------------------------------------------------
Blog:http://www.cnblogs.com/linjiqin/
Hadoop交流群(250363249)、Java+Oracle交流群(158560018)

題外話:
本人來自鐵觀音的發源地——泉州安溪,有需要正宗安溪鐵觀音的友友歡迎Q我:416501600。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM