轉載:http://blog.csdn.net/ocean181/article/details/6117369
UML的關聯(Association), 聚合(Aggregation), 組合(Composition)區別
三者描述對象的附屬[也就是依賴]關系: 關聯<聚合<組合, 依賴關系是逐漸加強的.
inheritance: "a kind of": 貓是一種動物,說明貓從動物繼承;
association: 兩者之間存在某種關聯即可,很弱的關系,如student and course, 每個學生可以選不同的課,每門課上有不同學生;
aggregation: "consist of":整體與部分之間的關系,但這里部分可以脫離整體單獨存在,如MP3上所插的耳機,MP3包含耳機,但這個耳機也可以單獨存在,或者插在其他電腦上。
composition: 更強的aggregation,這里部分不能脫離整體而存在,這個部分是整體的私有財產。比如Apple Itouch上的電池,原則不能拆下來單獨使用。
關聯
關聯(association)表明某個對象可以向另一個對象通過某種方式發送消息。發送消息的方法可以通過指針成員變量, 也可以是方法參數、局部變量等等。例如:

class A { private: B* itsB; };
聚合
聚合(aggregation)是一種特殊的聯系,它表明了“部分”到“整體”的關系,顯著的特點就是不能包含循環的聯系 (就是說,部分中不能包含整體)。如:

class Node { private: vector<Node*> itsNodes; };
上述代碼只有當子節點不會成為父節點的父節點時(即,必須是樹結構,不能是圖結構),才能稱之為聚合。
從實現的角度講,聚合可以表示為:
class A {...} class B { A* a; .....}
組合
組合(composition)跟聚合幾乎相同,唯一的區別就是“部分”不能脫離“整體”單獨存在,就是說, “部分”的生命期不能比“整體”還要長。例如:

class Car { public: virtual ~Car() {delete itsCarb;} private: Carburetor* itsCarb };
從實現的角度講,組合實現的形式是: class A{...} class B{ A a; ...}