聚合與組合、依賴與關聯的區別

今天碰到一個題,問的是聚合和組合的區別,不是很清楚,到網上搜了一段話,摘錄如下:

 

聚合:表示兩個對象之間是整體和部分的弱關係,部分的生命週期可以超越整體。如電腦和鼠標。

組合:表示兩個對象之間是整體和部分的關係,部分的生命週期不能超越整體,或者說不能脫離整體而存在。組合關係的“部分”,是不能在整體之間進行共享的。

不過,如果你要說,眼睛可以移植,是不是說可以脫離人而存在,它們就不是組合關係了?其實,UML中對象的關係都是在相應的軟件環境或實際場景下定義的,這裏區別聚合和組合的關係,關鍵還是在於它們之中整體和部分的關係強、弱,以及它們之間的依附關係。如果剛纔說眼睛可以移植給別人,那你也可以把它認爲是聚合,這都要結合實際場景來說明。

另外兩個比較重要的關係是關聯和依賴:
關聯:簡單的可以認爲,如果一個類作爲了另外一個類的屬性,那一定是關聯關係。但你要知道,聚合是一種特殊的關聯,而組合又是一種特殊的聚合。一般的關聯我們認爲是平級的、無整體部分關係的,如朋友關係。

依賴:對象之間的臨時關係,臨時性體現在不超越方法的週期。簡單的說,在方法使用到的,如參數類,就一定是依賴關係。
(以上文章來源於:http://www.blogjava.net/lukangping/archive/2010/08/01/327693.html

 

is a 關係,那麼它是一個集成關係;比如:我 is a 人;再比如菱形、圓形和方形都是形狀的一種,那麼他們都應該從形狀類繼承而不是聚合。

has a關係,那麼它是一個聚合關係;比如:我 has a 頭;再比如電腦是由顯示器、CPU、硬盤等組成的,那麼你應該把顯示器、CPU、硬盤這些類聚合成電腦類,而不是從電腦類繼承。

聚合和組合都屬於關聯,很難區分,但是隻要記住一點,區分它們就容易多了:

       處於聚合關係的兩個類生命週期不同步,則是聚合關係;處於組合關係的兩個類的生命週期同步;eg聚合關係,A創建的時候,B不一定創建;當A消亡時,B不一定消亡。class A{   private  B;}class B{....}組合關係,當創建一個A對象時,也會創建一個B對象;當A對象消亡時,作爲A的屬性的B對象也會消亡。class A{private B b=new B();....}class B{....}

(以上文章來源於:http://hi.baidu.com/yxj1141/blog/item/e7a95f1d7c886b9886d6b679.html

發佈了43 篇原創文章 · 獲贊 37 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章