UML 中聚合和组合之间的区别
聚合和组合之间的主要区别
- 聚合是两个对象之间描述“拥有”关系的一种关联类型,而组合是聚合的一种特定类型,它暗示所有权。
- 聚集用一端带有空箭头的直线表示,而组合用任意一端带有实箭头的直线表示。
- 在聚合关系中,相互关联的对象可以彼此独立地存在于系统范围内。但在组合关系中,相互关联的对象不能彼此独立地存在于系统范围内。
- 在聚合中,链接的对象不依赖于其他对象,而在组合中,对象高度依赖于彼此。
- 在聚合中,删除单个元素不会影响另一个关联元素。相反,在组合中,删除单个元素会影响另一个关联元素。
- 实心菱形表示聚合,空心菱形表示组合。

什么是聚合?
聚合是关联的一种特殊情况,即一个对象“具有”另一个对象,您可以在它们之间进行聚合。它们之间的方向有助于您指定哪个对象包含另一个对象。聚合也称为“具有”关系。它是关联关系的子类型 UML.
什么是组合?
组合是聚合的一个特例,它可以帮助您指定组合类和下属(部分)类之间的整体-部分关系。
UML 中聚合和组合之间的区别
以下是聚合和组合之间的主要区别:
聚合 | 组成成分 |
---|---|
聚合是两个对象之间的一种关联类型,也描述“具有”关系。 | 组合是暗示所有权的一种特定类型的聚合。 |
聚合用一端带有空箭头的直线表示。 | 构图用一条直线表示,其中任意一端都有实心箭头。 |
聚合是关联关系的一部分。 | 组合是关联关系的一部分。 |
聚合被认为是一种弱类型的关联。 | 该组合被认为是一种强类型的关联。 |
在聚合关系中,相互关联的对象可以保留在彼此独立的系统范围内。 | 在组合关系中,相互关联的对象不能彼此独立地保留在范围内。 |
在聚合中,链接的对象不依赖于其他对象。 | 在构图中,对象彼此高度依赖。 |
在聚合中,删除单个元素不会影响另一个相关元素。 | 在组合中,删除单个元素会影响另一个相关元素。 |
例子:汽车需要一个轮子,但并不总是需要同一个轮子。汽车也可以用另一个轮子正常运转。 | 示例:文件夹内有一个文件。如果删除该文件夹,则与该文件夹关联的文件也会被删除。 |
在聚合中,父级 与子实体的关系。 |
在组合中,父实体拥有子实体。 |
它用实心菱形表示 | 它用空心菱形表示 |
孩子没有一生。 | 孩子可以拥有一生。 |
它由装配类旁边的空心菱形表示。 | 它用装配类旁边的实心菱形表示。 |
删除组件不会影响其部件。 | 在拥有某个类的情况下,该对象将被删除。这也会影响包含该类的对象。 |
聚合与组合:关键统计数据
聚合 | 组成成分 | |
---|---|---|
所有者 | 没有主人 | 单身业主 |
终身版 | 拥有他们的一生。 | 拥有者的一生。 |
子对象 | 子对象都是独立的。 | 子对象属于单个父对象。 |
构图示例
文件夹可以包含许多文件,而每个文件只有一个父文件夹。如果删除文件夹,则所有包含的文件也将被删除。在复合聚合中,一个对象一次只能属于一个复合聚合。
聚合示例
比如你的汽车由车轮、发动机、变速箱、转向器、车身等组成,它是一个总成,其他零件都是它的组成部分。
这里,汽车到车轮是一个聚合,汽车到发动机是另一个聚合,汽车到变速箱是另一个聚合,等等。
这种配对有助于您将组件中组成部分的多样性定义为其结果。还可以描述对象的数量。
汽车需要车轮才能正常运转。但是,我们不能对汽车说同样的话。同样的逻辑可以应用于自行车、自行车或任何其他车辆,但不能应用于特定的汽车。
这里,即使没有汽车对象,车轮对象也是有意义的。这被称为聚合关系。