类图中的组合和聚合
Posted
技术标签:
【中文标题】类图中的组合和聚合【英文标题】:Composition and Aggregation in a Class diagram 【发布时间】:2011-12-26 00:01:14 【问题描述】:在设计类图时,我很难理解这些,据我所知,组合是一种“具有”关系,但聚合?我不知道它是什么。一件事我什么时候知道在类图中使用组合?我什么时候知道在类图中使用聚合?一个例子将不胜感激。
【问题讨论】:
【参考方案1】:聚合和组合之间的主要区别在于“具有”关系的属性。它或强或弱。
聚合“has-a”关系属于“弱类型”。弱意味着聚合器的链接组件可以在聚合生命周期中存活,或者可以以其他方式访问。一个简单的例子是一个足球俱乐部及其成员。如果俱乐部解散了,您仍然拥有会员 - 事实上,这些会员也可能是其他俱乐部的会员,因此仍然存在。
组合“has-a”关系属于“强类型”。强烈的意思是没有另一个就不能存在。组件的生命周期直接链接到“父级”。一个例子是有房间的房子。如果你决定拆掉房子,你也会失去你的房间。
也许有点抽象,但我认为这就是它背后的想法。
【讨论】:
我忘了问,联想呢?【参考方案2】:查看之前问题的答案here、here 和here。
我个人不使用聚合。语义太弱而无用。它带来的问题多于解决的问题。只有一个地方它具有明确定义且可能有用的属性,可以将其与简单的二元关联区分开来(见脚注)。
组合很有用,因为它定义了关于不变性和生命周期管理的重要属性(参见上面的第一个链接)。多年来我一直很高兴地生存下来,而无需使用聚合。
hth.
脚注。如果您需要对递归树关系进行建模,则可以使用聚合,例如一个部分递归地分解成子部分。聚合表示不能存在循环关系,即一部分不能直接或间接地成为其自身的子部分。然而,大多数阅读该模型的人不太可能知道这一点。 - 所以你需要添加评论。这意味着您最好坚持使用二元关联并避免使用聚合时的混淆。
【讨论】:
以上是关于类图中的组合和聚合的主要内容,如果未能解决你的问题,请参考以下文章