UML 图帮助(聚合/组合)[重复]

Posted

技术标签:

【中文标题】UML 图帮助(聚合/组合)[重复]【英文标题】:UML Diagram Help (Aggregation/Composition) [duplicate] 【发布时间】:2016-07-22 15:49:26 【问题描述】:

我无法完全理解组合和聚合。据我了解,组成关系意味着一个人死了另一个人死了。聚合意味着它们是由那个组成的,但不一定依赖于那个事物的持续存在。

这是我为一个红心游戏而编写的 UML。我是否正确掌握了这个概念?

【问题讨论】:

我会告诉你,你的 Card 类看起来不对。所有这些整数属性应该完成什么? @JimL。哈哈,我正在使用预定义的 Card 类。我不会这样设计它,但必须解决这个设计。 你用什么工具来绘制这个图表,为什么它为几个类复制了两次 memberName?看起来不像真正的 UML。 我用的是visio,还是不完整。我还没有定义变量和方法。我只是想更好地了解聚合/组合类型。 【参考方案1】:

什么是组合和聚合?

组合和聚合表示整体/部分关系(UML 2.5,第 11.5.3.1 节):

一个二元关联可以表示一个复合聚合(即,一个 整体/部分关系)。

因此,如果您使用钻石,您应该先问问自己它是否真的是整体/部分关系,然后再考虑如何创建或删除对象。

那么组合对共享聚合有额外的限制。在组合关系中(UML 2.5,第 9.5.3 节):

(...) 复合对象负责存在和存储 的组合对象。 复合聚合是一种强形式 要求一个部分对象最多包含在一个中的聚合 一次复合对象。如果一个复合对象被删除,所有 它作为对象的部分实例将被删除。

分析您的具体图表

根据你的图表:

玩家仅存在于游戏中(即临时标识,而不是跨多个游戏存在的帐户)。组合可能是有意义的,因为玩家可以被视为游戏的一部分。 仅与玩家相关。这就说得通了。但真的是组合关系吗?手是玩家的一部分吗?玩家是由双手组成的吗?玩家不会有几手顺序但不是在同一时间吗?我真的对这里的作文有疑问;我会用一个普通的 1 玩家对多手关联来表示这一点。 游戏聚合了几个套牌。我不知道你的游戏,但我希望有一副牌。如果使用多个套牌,并且套牌只存在于游戏中(类似于玩家),我宁愿看到组合而不是聚合。或者,您可能不是指牌组,而是牌组及其状态。在这种情况下,我会选择一对多关联而不是组合(套牌+状态不会成为游戏的组成部分,而是定义游戏的状态)。 套牌是独立于套牌存在的卡片的集合。这让我很困扰,因为我的世界经验总是表明一张牌是套牌的一部分。如果我在某个地方找到一张孤立的牌,我总是会寻找它的牌组。因此,我宁愿期待卡片和套牌之间的组合。 最后一手牌是几张牌的聚合,这似乎是有道理的。请注意,这与套牌和卡片之间的组合并不矛盾。

【讨论】:

谢谢。这帮助了很多。 您对 UML 2.5 的引用不完整。他们还令人困惑地说“可以在删除复合对象之前从复合对象中删除部分对象,因此不会作为复合对象的一部分被删除”。请参阅我的 SO 回答 ***.com/questions/734891/…

以上是关于UML 图帮助(聚合/组合)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

UML类图关系(泛化、继承、实现、依赖、关联、聚合、组合)

UML-类图详解(依赖关联聚合组合泛化实现)

UML-类图详解(依赖关联聚合组合泛化实现)

UML类图关系(泛化(继承)实现依赖关联聚合组合)

UML类图关系(泛化 继承实现依赖关联聚合组合)-转

UML之类图关系(继承实现依赖关联聚合组合)