【问题标题】:UML Relationships. AggregationUML 关系。聚合
【发布时间】:2014-08-05 22:00:30
【问题描述】:

我的 UML 图有问题,如果你能帮助我,我会很高兴。我有这样的关系

对象 A (1)----(0..*) 对象 B

对象 B (1)----(0..*) 对象 A

我想团结他们。我该怎么做?非常感谢。

【问题讨论】:

  • 不是和 (..) 一样吗?什么例子可以是单个A对象有多个B对象,而单个B对象有多个A对象?
  • 例如一个功能可以是一个服务器的一部分,而一个服务器可以是分布式功能的一部分

标签: uml aggregation relationships


【解决方案1】:

你能定义“团结他们”这个词吗?你到底想达到什么目标?举个例子可能会有所帮助。

同时,我可以尝试猜测并为您提供两种可能的解决方案。也许他们可以帮助您重新表述您的问题,甚至找到解决方案:

在解决方案 1 中,我刚刚建立了一个描述你们双方的关系。如果对象之间的链接只有一个单一且明确的标准,则可以使用此方法。典型的 n..m 关系。对象 A 将各自持有相关对象 B 的集合,反之亦然。

  • 例如,一个人(图中的 A)可以加入多个俱乐部 (B),而一个俱乐部可以有多个成员 - 这种情况背后只有一个逻辑关系 - 成员资格

解决方案 2 实际上有 2 种不同的方式来关联这些元素,每一种 1..n。因此,A 拥有 B 的集合,B 拥有 As 的集合,但它们是不相关的。

  • 扩展相同的示例 - 个人 (A) 只能加入 1 个俱乐部 (B),而一个俱乐部可以有许多成员并持有他们的参考(图表上的 col_a)。同时,一个 Club 只能有 1 个所有者,而一个 Person 可以拥有多个 Club(col_b)。这里我们有两种不同的逻辑关系 - membershipownership

当然,其他的多重性和导航性也是可能的,这只是给你一个想法的例子。

其中一种情况听起来像你的吗?

更新(在第一条评论之后)

所以,这里是更新的解决方案 1:

这是此处使用的聚合,更多的是组-成员关系。它非常适合我在那里的第一个解决方案的描述。成员 (B) 可以在组 (A) 之间“共享”,而 Gruop 对其生命周期没有任何特殊控制。

真正的整体-部分关系将采用组合而不是聚合(视觉上用黑色菱形而不是白色菱形描绘)。它的语义是整个对象可以完全控制包含的对象(部分)的生命周期。因此,部分不能在多个整体之间共享,如果整体本身被破坏,则必须将其破坏。

现在您只需要找出哪种情况最能描述您的问题,选择这些解决方案并最终微调多重性。

【讨论】:

  • 谢谢!是的,我使用了第一个解决方案,但在我看来,它并没有显示“部分整体”的关系。这样对吗?这种情况有其他解决方案吗?
  • 你是对的,它根本没有表现出整体关系的性质。为此,我们有组合和聚合。请查看我的更新答案。
【解决方案2】:

这是一种可以在 UML 中表示此场景的方法。

一个服务器可以包含 0 个或多个 Functions(即聚合关系)。

每个函数必须属于一个服务器。或者如果它是一个分布式函数,那么它可以属于许多服务器。

【讨论】:

    猜你喜欢
    • 2014-02-08
    • 2015-08-07
    • 2014-09-18
    • 1970-01-01
    • 2012-03-27
    • 2020-07-20
    • 2013-02-23
    • 2013-08-08
    相关资源
    最近更新 更多