UML 聚合和组合的区别:
定义区别:
聚合(Aggregation):聚合描述的是这样一种association,在这个association里,一个类是属于一collection.也就是说聚合说的是一种部分与整体的关系,而当部分离开整体时,两者都还有原来的实际意义.聚合是一种很弱的关联关系.
组合(Composition):与聚合相比,组合描述的是这样的关联关系,部分离开整体后就没有实际意义了.所以我们说组合是一种很强的关联关系.
区别1:组合则是比聚合更强的关联形式。组合是指带有很强的拥有有关系且整体与部分的生命周期一致的聚合关联形式。例如Windows的窗口和窗口上的菜 单就是组合关系。生命周期一致指的是部分必须在组合创建的同时或者之后创建,在组合销毁之前或者同时销毁,部分的生命周期不会超出组合的生命周期。组合是 用带实心菱形的实线来表示。
区别2:两个类之间的简单关联表示了两个同等地位类之间的结构关系。聚合也是一种关联关系,与简单关联不同的是,它描述的是一个整体和组成部分的关系,即 “has-a”关系,意思是整体对象拥有部分对象,例如学校和学生的关系。聚合的整体和部分之间在生命周期上没有什么必然的联系,部分对象可以在整体对象 创建之前创建,也可以在整体对象销毁之后销毁。聚合用带一个空心菱形(整体的一端)的实线表示。
另一个讲解:
UML中的联系(association)、聚合(aggregation)和组合(composition)三个概念很相似,也很难理解。今天看到这篇文章解释得很清楚,所以在这里转一下,希望能对需要的人有所帮助。
联系
联系(association)表明某个对象可以向另一个对象通过某种方式发送消息。发送消息的方法可以通过指针成员变量,也可以是方法参数、局部变量等等。例如:
class A{
private:
B* itsB;
};
聚合
聚合(aggregation)是一种特殊的联系,它表明了“部分”到“整体”的关系,显著的特点就是不能包含循环的联系(就是说,部分中不能包含整体)。如:
class Node{
private:
vector<Node*> itsNodes;
};
上述代码只有当子节点不会成为父节点的父节点时(即,必须是树结构,不能是图结构),才能称之为聚合。
组合
组合(composition)跟聚合几乎相同,唯一的区别就是“部分”不能脱离“整体”单独存在,就是说, “部分”的生命期不能比“整体”还要长。例如:
class Car { public: virtual ~Car() {delete itsCarb;} private: Carburetor* itsCarb }; 转载, 原地址:http://blog.sina.com.cn/s/blog_600ce18b0100eglz.html http://blog.csdn.net/PHPhot/archive/2009/04/18/4088762.aspx