UML 中聚合与组合的区别

聚合与组合的关键区别

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

什么是聚合?

当一个对象“拥有”另一个对象时,聚合是一种特殊的关联,您可以在它们之间进行聚合。它们之间的方向有助于指定哪个对象包含另一个对象。聚合也称为“拥有”关系。它是 UML 中关联关系的一个子类型。

什么是组合?

组合是聚合的一种特殊情况,有助于指定组合类和从属(部分)类之间的整体-部分关系。

UML中聚合与组合的区别

这是聚合与组合的主要区别

聚合 组合
聚合是两个对象之间的一种关联,也描述了“拥有”关系。 组合是聚合的一种特定类型,暗示所有权。
聚合由一端带空心箭头的直线表示。 组合由一端带实心箭头的直线表示。
聚合是关联关系的一部分。 组合是关联关系的一部分。
聚合被认为是弱类型的关联。 组合被认为是强类型的关联。
在聚合关系中,相互关联的对象可以在不依赖对方的情况下存在于系统范围内。 在组合关系中,相互关联的对象不能在没有对方的情况下存在于系统范围内。
在聚合中,链接的对象不依赖于另一个对象。 在组合中,对象高度依赖于彼此。
在聚合中,删除一个元素不会影响另一个关联元素。 在组合中,删除一个元素会影响另一个关联元素。
示例:一辆汽车需要一个轮子,但它并不总是需要同一个轮子。汽车也可以与另一个轮子一起正常运行。 示例:一个文件被放在文件夹中。如果删除文件夹,则与该给定文件夹关联的文件也会被删除。
在聚合中,父项
与子实体的关系。
在组合中,父实体拥有子实体。
它由一个实心菱形表示 它由一个空心菱形表示
子项没有生命周期。 子项可以有生命周期。
它由装配类旁边的空心菱形表示。 它由装配类旁边的实心菱形表示。
装配的删除永远不会影响其零件。 在拥有类的情况下,对象会被删除。它也会影响包含类对象。

聚合 vs 组合:关键统计数据

聚合 组合
所有者 无所有者 单所有者
终身 拥有自己的生命周期。 所有者的生命周期。
子对象 子对象都是独立的。 子对象属于一个父项。

组合示例

文件夹可以包含许多文件,而每个文件只有一个文件夹父项。如果一个文件夹被删除,其中包含的所有文件也会被删除。在组合聚合中,一个对象一次只能是一个组合的一部分。

Example of Composition

聚合示例

例如,您的汽车由车轮、发动机、变速箱、转向系统和车身等组成。这是一个装配,其他零件是其组成部分。

这里,汽车到车轮是一次聚合,汽车到发动机是另一次聚合,汽车到变速箱是又一次,以此类推。

这种配对有助于您定义装配内组成部分的倍数性。对象的数量也可以在此显示。

汽车需要一个轮子才能正常运行。但是,我们不能说汽车也一样。同样的逻辑也适用于自行车、两轮车或任何其他车辆,但不适用于特定的汽车。

这里,即使没有汽车对象,轮子对象也有意义。这被称为聚合关系。

Example of Aggregation