java - UML 图帮助(聚合/组合)

标签 java uml aggregation composition

我在完全理解码合和聚合方面遇到了一些困难。根据我的理解,组合关系意味着如果一个人死了,另一个人也会死。聚合意味着它们是由该事物组成的,但不一定依赖于该事物的持续存在。

这是我为红心游戏编写的 UML。我对这个概念的理解正确吗? UML Diagram

最佳答案

什么是组合和聚合?

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

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

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

然后,组合对共享聚合有额外的约束。在组合关系中(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 人对多手关联来表示这一点。
  • 游戏聚合了多个套牌。我不知道你的游戏,但我希望有一套。如果使用多个套牌,并且套牌仅存在于游戏中(类似于玩家),我宁愿看到组合而不是聚合。或者,您可能指的不是牌组,而是牌组及其状态。在这种情况下,我会选择一对多关联而不是组合(套牌+状态不会成为游戏的组件,但定义游戏的状态)。
  • 牌组是独立于牌组而存在的的集合。这让我很困扰,因为我的世界经验一直表明,一张牌是一副牌的一部分。如果我在某处发现一张孤立的牌,我总是会寻找它的牌组。因此,我宁愿期待卡牌和牌组之间的组合。
  • 最后一手牌是几张牌的聚合,这似乎是有道理的。请注意,这与牌组和卡片之间的组合并不矛盾。

关于java - UML 图帮助(聚合/组合),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36380031/

相关文章:

python - 根据另一列值重新采样和聚合数据

c++ - 正确使用 std::unique_ptr 和 std::weak_ptr

javascript - 自己线程中的 Selenium 异步脚本会阻止其他脚本

c++ - Visual Studio 2012 可以将 C++ 代码反向工程为 UML 图吗?

c++ - 如何在 UML 中绘制 namespace /包范围方法/变量?

oop - 对象集合、对象聚合、对象关联和对象组合之间有什么区别?

java - Hibernate join 没有外键并且只映射一个表

java - hibernate 二级缓存。集群上的读写或事务缓存并发策略?

java - 为什么我的 if(else if) 语句被忽略?

model - 图表和模型有什么区别