gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:45:30 25 4
gpt4 key购买 nike

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

这是我为红心游戏编写的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com