类图中的组合和聚合

5

当设计一个类图时,我很难理解这些概念,据我所知,组合是一种“拥有”的关系,但聚合是什么?我不知道。那么何时应该在类图中使用组合关系?何时应该使用聚合关系?能否给出一个例子?

2个回答

25
聚合和组合的主要区别在于它们“拥有关系”的属性。它可以是强类型或弱类型。
聚合的“拥有关系”是“弱类型”的。弱类型意味着聚合器的链接组件可能会幸存于聚合生命周期中或以其他方式访问。一个简单的例子是一个带有成员的足球俱乐部。如果俱乐部被解散,你仍然有成员——事实上他们也可能是其他俱乐部的成员,因此仍然存在。
组合的“拥有关系”是“强类型”的。强类型意味着一个不能没有另一个存在。组件的生命周期直接与父级相关联。例如,一栋房子里有房间。如果你决定拆掉这栋房子,你也将失去你的房间。
也许有点抽象,但我认为这就是它背后的思想。

我忘了问,关联方面怎么样? - user962206

0

请查看之前问题的答案这里, 这里这里

个人而言,我不使用聚合。它的语义太弱了,没有什么用处。它引起的问题比解决的问题还要多。只有一个地方它具有明确定义和潜在有用的属性,可以将其与简单的二元关联区分开来(见脚注)。

组合可能很有用,因为它定义了重要的不可变性和生命周期管理属性(参见上面的第一个链接)。多年来,我一直很幸福地生活着,从未需要使用聚合。

希望对你有所帮助。

注脚。聚合可以应用于需要建模递归树关系的情况,例如零件以递归方式分解为子部件。聚合意味着不能有循环关系,即一个零件不能直接或间接地成为其自身的子部件。但是,大多数阅读该模型的人不太可能知道这一点。-因此,您需要添加注释。这意味着最好坚持使用二元关联并避免混淆使用聚合。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接