UML 中聚合与组合的区别
聚合与组合的关键区别
- 聚合是两个对象之间的一种关联,描述“拥有”关系,而组合是聚合的一种特定类型,暗示所有权。
- 聚合由一端带空心箭头的直线表示。另一方面,组合由一端带实心箭头的直线表示。
- 在聚合关系中,相互关联的对象可以在不依赖对方的情况下存在于系统范围内。但在组合关系中,相互关联的对象不能在没有对方的情况下存在于系统范围内。
- 在聚合中,链接的对象不依赖于另一个对象,而在组合中,对象高度依赖于彼此。
- 在聚合中,删除一个元素不会影响另一个关联元素。相反,在组合中,删除一个元素会影响另一个关联元素。
- 聚合由实心菱形表示,而空心菱形表示组合。

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