Java UML图帮助(聚合/组合)

Java UML图帮助(聚合/组合),java,uml,aggregation,composition,Java,Uml,Aggregation,Composition,我很难完全理解合成和聚合。根据我的理解,组合关系意味着如果一个死了,另一个也死了。聚合意味着它们是由这些组成的,但不一定依赖于这些事物的持续存在 这是我为一个心灵游戏而编写的UML。我对这个概念理解正确吗? 什么是组成和聚合? 组合和聚合表示整体/部分关系(UML 2.5,第11.5.3.1节): 二进制关联可以表示复合聚合(即,二进制关联) 整体/部分关系) 因此,如果你使用菱形,在考虑对象是如何创建或删除之前,你应该先问问自己它是否真的是一个整体/部分关系 然后,组合对共享聚合具有额外的约束

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

这是我为一个心灵游戏而编写的UML。我对这个概念理解正确吗?
什么是组成和聚合?

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

二进制关联可以表示复合聚合(即,二进制关联) 整体/部分关系

因此,如果你使用菱形,在考虑对象是如何创建或删除之前,你应该先问问自己它是否真的是一个整体/部分关系

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

(…)复合对象负责存在和存储 组成对象的一部分
复合聚合是一种强大的 要求零件对象最多包含在一个零件中的聚合 一次合成一个对象。如果删除了复合对象,则所有 作为对象的零件实例将随之删除

分析您的特定图表

根据您的图表:

  • 玩家只存在于一个游戏中(即临时身份,而不是多个游戏中存在的帐户)。这种组合是有意义的,因为玩家可以被视为游戏的一部分
  • 手只存在于与玩家相关的位置。这是有道理的。但这真的是一种组合关系吗?手是球员的一部分吗?玩家是由手组成的吗?一个玩家不是有几手连续的牌,但不是在同一时间吗?我真的怀疑这里的作文;我会用一个普通的一手对多手的组合来表示这一点
  • 这场比赛共有几副牌。我不知道你的比赛,但我希望只有一副牌。如果使用了几个牌组,并且牌组只存在于一个游戏中(与玩家类似),我宁愿看到合成而不是聚合。或者,您可以指的不是甲板,而是甲板及其状态。在这种情况下,我会选择一对多关联,而不是组合(牌组+状态不是游戏的组成部分,而是定义游戏的状态)
  • 牌组是独立于牌组存在的牌的集合。这让我很烦恼,因为我的世界经验总是表明,一张牌是一副牌的一部分。如果我在某处发现一张孤立的卡片,我总是寻找它的牌组。因此,我更希望在纸牌和牌组之间进行组合
  • 最后一手牌是几张牌的集合,这似乎是有道理的。请注意,这与卡组和卡之间的组合并不不兼容
我会告诉你,你的信用卡等级看起来不对。所有这些整数属性应该完成什么任务?@JimL。哈哈,我正在使用一个预定义的卡片类。我不会这样设计它,但必须围绕这个设计工作。你用什么工具画这个图表,为什么它会在几个类中重复memberName两次?看起来不像真正的UML。我使用了visio,但它不完整。我还没有定义变量和方法。我只是想更好地理解聚合/组合类型。谢谢。这帮了大忙。您对UML2.5的引用是不完整的。它们还令人困惑地说,“在删除复合对象之前,可以从复合对象中删除部分对象,因此不能将其作为复合对象的一部分删除”。看到我的答案了吗