类图中的组合和聚合

时间:2011-11-10 09:06:06

标签: composition aggregation class-diagram modeling

在设计类图时,我很难理解这些,从我所知的构成是一个“有一个”关系但聚合?我不知道它是什么。还有一件事我什么时候才能在类图中使用Composition?什么时候才能知道在类图中使用聚合?一个例子将受到高度赞赏。

2 个答案:

答案 0 :(得分:22)

聚合和合成之间的主要区别在于“has-a”关系的属性。它要么强还是弱。

聚合“has-a”关系属于“弱类型”。弱意味着聚合器的链接组件可以在聚合生命周期中存活,或者可以以其他方式访问。一个简单的例子就是一个足球俱乐部和它的成员。如果俱乐部被解散,你仍然有会员 - 实际上也可以是其他俱乐部的成员,因此保持活力。

作品“有一个”的关系是“强类型”。一个人不能存在于另一个人身上的强烈意义。组件的生命周期与“父”直接相关。一个例子是带房间的房子。如果你决定拆掉房子,你也会失去房间。

也许有点抽象,但我认为这背后的想法。

答案 1 :(得分:0)

查看以前问题的答案hereherehere

我个人不使用聚合。语义太弱而无用。它导致的问题多于解决的问题。只有一个地方有明确定义和潜在有用的属性,使其与简单的二元关联区别开来(见脚注)。

组合非常有用,因为它定义了不变性和生命周期管理的重要属性(参见上面的第1个链接)。多年来我幸福地幸存下来,而不需要使用聚合。

第h

脚注。如果您需要建模递归树关系,例如聚合,则可以应用聚合。一部分递归地分解成子部分。聚合表示不存在循环关系,即一部分不能直接或间接地成为其自身的子部分。然而,阅读模型的大多数人都不太可能知道这一点。 - 所以你需要添加评论。这意味着你可以坚持使用二元关联,避免使用聚合的混乱。

相关问题