記得在當時學習uml總是不好分清聚合與組合的關係,找工作時特地複習了這塊的內容,結果正巧被面試官問道,這兩天又在搞這塊的內容,對聚合與組合有了更清楚的了解:
聚合:表示兩個物件之間是整體和部分的弱關係,部分的生命週期可以超越整體。如電腦和滑鼠,就可以用一下圖形表示:
組合:表示兩個物件之間是整體和部分的
強關係,部分的生命週期不能超越整體,或者說不能脫離整體而存在。組合關係的「部分」,是不能在整體之間進行共享的。如人和眼睛的關係:
不過,如果你要說,眼睛可以移植,是不是說可以脫離人而存在,它們就不是組合關係了?其實,uml中物件的關係都是在相應的軟體環境或實際場景下定義的,這裡區別聚合和組合的關係,關鍵還是在於它們之中整體和部分的關係強、弱,以及它們之間的依附關係。如果剛才說眼睛可以移植給別人,那你也可以把它認為是聚合,這都要結合實際場景來說明。
另外兩個比較重要的關係是關聯和依賴:
關聯:簡單的可以認為,如果乙個類作為了另外乙個類的屬性,那一定是關聯關係。但你要知道,
聚合是一種特殊的關聯,而組合又是一種特殊的聚合
。一般的關聯我們認為是平級的、無整體部分關係的,如朋友關係。
依賴:物件之間的臨時關係,臨時性體現在不超越方法的週期。簡單的說,在方法使用到的,如引數類,就一定是依賴關係。
【總之,組合、聚合都是表示部分和整體的關係,只不過區別在於強弱;關聯其實是一種**形式上的部分和整體的關係,非實際事物上的部分和整體關係,是我們強制把幾個東西整在一塊形成的新事物作為乙個整體;依賴是一種臨時關係,雖然叫依賴,但其實是非常弱的關係。】
最後想說一句,實際工作中,我並沒有發現區分這四種關係有多麼大的用處,也許自己還沒有碰到,只是覺得可能每個學習它的同學總想把它搞清楚,但實際工作中作用並不明顯。
關聯 聚合 組合
關聯 聚合 aggregation 以及組合 composition 的區別?涉及到uml中的一些概念 關聯是表示兩個類的一般性聯絡,比如 學生 和 老師 就是一種關聯關係 聚合表示 has a 的關係,是一種相對鬆散的關係,聚合類不需要對被聚合類負責,如下圖所示,用空的菱形表示聚合關係 從實現的角...
依賴 關聯 聚合 組合 的區別
1.例項化 依賴 a將b作為區域性變數進行使用.程式1 void a foo 2.關聯 a與b存在一定的關係.這裡只考慮單向導航.關聯在 中有多種表現形式.第一種,作為引數 程式2 void a foo b b b b or b b 第二種,作為成員變數 程式3 class a void foo p...
UML 關聯 聚合 組合
聚合和組合都屬於關聯,處於聚合關係的兩個類生命週期不同步,則是聚合關係 處於組合關係的兩個類的生命週期同步。關聯可以有方向,可以是單向關聯,也可以是雙向關聯。關聯在c 中呈現為 class a class b a function1 b b 或a function1 b b 或a function1...