UML 中聚合和组合之间的区别

聚合和组合之间的主要区别

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

什么是聚合?

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

什么是组合?

组合是聚合的一个特例,它可以帮助您指定组合类和下属(部分)类之间的整体-部分关系。

UML 中聚合和组合之间的区别

以下是聚合和组合之间的主要区别:

聚合 组成成分
聚合是两个对象之间的一种关联类型,也描述“具有”关系。 组合是暗示所有权的一种特定类型的聚合。
聚合用一端带有空箭头的直线表示。 构图用一条直线表示,其中任意一端都有实心箭头。
聚合是关联关系的一部分。 组合是关联关系的一部分。
聚合被认为是一种弱类型的关联。 该组合被认为是一种强类型的关联。
在聚合关系中,相互关联的对象可以保留在彼此独立的系统范围内。 在组合关系中,相互关联的对象不能彼此独立地保留在范围内。
在聚合中,链接的对象不依赖于其他对象。 在构图中,对象彼此高度依赖。
在聚合中,删除单个元素不会影响另一个相关元素。 在组合中,删除单个元素会影响另一个相关元素。
例子:汽车需要一个轮子,但并不总是需要同一个轮子。汽车也可以用另一个轮子正常运转。 示例:文件夹内有一个文件。如果删除该文件夹,则与该文件夹关联的文件也会被删除。
在聚合中,父级
与子实体的关系。
在组合中,父实体拥有子实体。
它用实心菱形表示 它用空心菱形表示
孩子没有一生。 孩子可以拥有一生。
它由装配类旁边的空心菱形表示。 它用装配类旁边的实心菱形表示。
删除组件不会影响其部件。 在拥有某个类的情况下,该对象将被删除。这也会影响包含该类的对象。

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

聚合 组成成分
所有者 没有主人 单身业主
终身版 拥有他们的一生。 拥有者的一生。
子对象 子对象都是独立的。 子对象属于单个父对象。

构图示例

文件夹可以包含许多文件,而每个文件只有一个父文件夹。如果删除文件夹,则所有包含的文件也将被删除。在复合聚合中,一个对象一次只能属于一个复合聚合。

构图示例

聚合示例

比如你的汽车由车轮、发动机、变速箱、转向器、车身等组成,它是一个总成,其他零件都是它的组成部分。

这里,汽车到车轮是一个聚合,汽车到发动机是另一个聚合,汽车到变速箱是另一个聚合,等等。

这种配对有助于您将组件中组成部分的多样性定义为其结果。还可以描述对象的数量。

汽车需要车轮才能正常运转。但是,我们不能对汽车说同样的话。同样的逻辑可以应用于自行车、自行车或任何其他车辆,但不能应用于特定的汽车。

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

聚合示例