UML 图帮助 (Aggregation/Composition)

UML Diagram Help (Aggregation/Composition)

我在完全理解组合和聚合方面遇到了一些困难。据我了解,组合关系意味着如果一个人死了另一个人死了。聚合意味着它们由那个组成,但不一定依赖于那个东西继续存在。

这是我为红心游戏拼凑的 UML。我是否正确地理解了这个概念?

什么是组合和聚合?

组合和聚合表示 whole/part 关系(UML 2.5,第 11.5.3.1 节):

A binary Association may represent a composite aggregation (i.e., a whole/part relationship).

所以如果你使用钻石,你应该先问问自己它是否真的是一个whole/part关系,然后再考虑对象是如何创建或删除的。

然后组合对共享聚合有额外的约束。在组合关系中(UML 2.5,第 9.5.3 节):

(...) the composite object has responsibility for the existence and storage of the composed objects.
Composite aggregation is a strong form of aggregation that requires a part object be included in at most one composite object at a time. If a composite object is deleted, all of its part instances that are objects are deleted with it.

分析你的具体图解

根据你的图表:

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