【问题标题】:What type of composition would this be?这将是什么类型的组合?
【发布时间】:2016-09-21 08:06:17
【问题描述】:

我有一个关于如何使用我的代码制作图表的问题。

我有一个 Player 类,在这个类里面有一些方法。 我有另一个名为 HealthManager 的类,它决定玩家拥有多少生命值。

在我的 Playerclass 中,我使用一个 HealthManager 对象来做出一些决定(比如将生命值降至 0),在我的 HealthManager 类中,我使用一个 PlayerClass 对象来获取一些统计信息。

我可以将这种类型的关系称为关联吗?

【问题讨论】:

  • association 的情况下,Player 实例可能有 HealthManager 实例。这个可以吗? Player 实例也有可能有 许多 (比如说,五个)HealthManager 实例。那样可以么?如果两个的答案都是肯定的,那么它就是一个关联。我个人猜测应该是1:1的关系(每个Player只有一个HealthManager
  • 两个问题: (1) 假设 Player 对象 X 使用 HealthManager 对象 Y。那么 Y 将只使用 X 进行统计,还是可以使用不同的 Player 对象 Z ? (2) 对象是否具有生命周期依赖关系,即如果关联的 Player 对象被销毁,HealthManager 对象是否会被销毁,反之亦然?
  • 对于第一个问题:是的,这将是一个 1:1 的关系,每个玩家都有一个且只有一个 HealthManager。对于第二个问题,我根本没有做任何物体破坏,当我的玩家死亡时,它会在一个地方复活。所以死亡实际上是对象破坏,因为在我的代码中我没有删除我的对象
  • 我想知道这种关系是否是一种组合,它是一种特定的关联形式。如果一个对象被认为是另一个对象的一部分,则使用这种类型的关联。如果后者被破坏,那么它的部分显然也被破坏了。我认为作文不适用于您的情况。
  • 这听起来像是一个循环关系;也就是说,Player 依赖于HealthManager,而Player 又依赖于Player 来获取统计信息。关系是否有条件,即关系是否仅在某些条件下建立,例如在调用特定方法时?如果是,这种关系是如何建立的? HealthManager 是否在调用Player 的方法时作为参数传递?如果关系不是有条件的,则它是一个关联,它可以是组合或聚合,具体取决于相关对象的生命周期是如何控制的。

标签: c# oop uml diagrams


【解决方案1】:

是的,你可以称之为 1:1 关联。

【讨论】:

    【解决方案2】:

    如果 HealthManager 是 Player 的一部分,这是一个问题,根据您的描述(和 cmets)似乎如此。

    这意味着你在这里有一个整体的关系,而且 HealthManager 被分配给一个玩家,这意味着它是一个复合聚合(组合)。 HealthManager 可以从 Player 检索一些信息的事实仅表明此组合还具有向后导航性(即从 HealthManager 到 Player),这绝对是好的(并且在实心菱形之前用空心箭头表示)。

    如果 HealthManager 在 Player 被销毁时也被销毁,那么您几乎确定它是一个组合。

    还要考虑共享聚合和复合聚合都是关联的特化,即它们也是关联。话虽如此,如果您只是记录 1:1 关联而不是组合,它仍然是正确的,只是不要提供有关您的模型的一些细节。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多