【问题标题】:Why are association, aggregation and composition used the way they are used in this example?为什么关联、聚合和组合的使用方式与本例中的使用方式相同?
【发布时间】:2017-03-01 16:34:23
【问题描述】:

我了解这三者之间的区别(或者至少我认为我了解)。我知道还有很多其他类似的问题,其定义类似于 one

我正在寻找来自gliffy.com 的示例,并且我正在努力理解为什么使用它们的方式来使用某些关系。我想我真正苦苦挣扎的是了解何时使用关联。

我的一些问题是:

  1. 为什么 Customer-Order 和 Customer-Credit Card 是关联而不是像 Customer-Address 这样的聚合?
  2. 既然没有 Order 就不会存在 ItemOrder,为什么 Order-ItemOrder 不是组合?
  3. 为什么 ItemOrder-Item 不是聚合?

【问题讨论】:

    标签: uml aggregation


    【解决方案1】:

    为了回答这些问题,重要的是要知道为什么要绘制这个类图。只有作者知道,但也许这只是对gliffy能力的展示?否则,此模型中的类可能对应于源代码中的类,这些类是用 Java 或 C# 等面向对象语言编写的,并且该图旨在深入了解这些类之间的关系。

    1. 为什么 Customer-Order 和 Customer-Credit Card 是关联而不是像 Customer-Address 这样的聚合?

      显然,作者并不认为这些关系是“一部分”关系。也许 Customer 在源代码中没有任何对 Orders 或 CreditCards 的引用。可能地址信息属于 Customer 类的职责,但 Order 和 Credit Card 信息不属于。

    2. 既然没有 Order 就不会存在 ItemOrder,为什么 Order-ItemOrder 不是组合?

      也许作者只使用了 UML 的一个子集,并没有按照惯例使用组合。也许作者认为聚合和组合之间的区别对于这张图来说并不重要。

    3. 为什么 ItemOrder-Item 不是聚合?

      显然,作者并不认为这种关系是关系的一部分。也许作者保留了关系的聚合类型来表示一种特定的编程语言结构,在这种情况下,源代码中没有使用这种结构。也许作者认为一个接口永远不能聚合到另一个类中。

    顺便说一下,ItemOrder 和 ShoppingCart 之间的聚合显然是错误的。我认为钻石应该在关系的另一边。

    【讨论】:

      【解决方案2】:

      完全忘记共享/复合聚合。它确实具有低语义,并且只会导致徒劳的讨论是否需要它以及它在哪里使用正确或错误。只需使用(并解释)关联和多重性。

      (几乎)唯一可以以有意义的方式使用聚合的地方是数据库外键(强制删除)和内存(释放未使用)管理。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-29
        • 2012-11-14
        • 2021-12-18
        • 1970-01-01
        • 2017-01-20
        • 1970-01-01
        • 2012-07-01
        • 2016-03-01
        相关资源
        最近更新 更多