【问题标题】:UML aggregation when interfaces are used使用接口时的 UML 聚合
【发布时间】:2008-09-18 15:43:13
【问题描述】:

如何在 UML 中表示两个类之间的聚合关系,使得每个类都有一个到另一个类接口的链接,而不是实现类?

例如我有一个实现 iFoo 的类 Foo 和一个实现 iBar 的 Bar。 Foo 应该有一个 iBar 类型的成员变量,而 Bar 应该有一个 iFoo 类型的成员变量。

如果我在两个实现类之间创建一个聚合,那么成员将是实现类的类型,而不是超类。并且接口之间的聚合在 UML 中是无效的(并且没有多大意义)。

【问题讨论】:

    标签: interface uml aggregate


    【解决方案1】:

    你能不能没有 Foo(实现)聚合 iBar(接口)?在我看来,这似乎是描述这种关系的正确方式。

    所以是这样的:

    -----------------      -----------------
    | <<interface>> |      | <<interface>> |
    |     iFoo      |<>  <>|     iBar      |
    -----------------  \/  -----------------
            ^          /\          ^
            |         /  \         |
    -----------------/    \-----------------
    |      Foo      |      |      Bar      |
    -----------------      -----------------
    

    【讨论】:

    • 看起来聚合标记被放置在关联的错误末端...除此之外,此图准确描述了所需的内容。
    【解决方案2】:

    接口不可实例化,因此 Bar 不能具有 iFoo 类型的属性,而 Foo 不能具有 iBar 类型的属性。

    你说你不想要 Bar 和 Foo 之间的关联。因此,您可以创建一个新类 (FooEx) 并让该类实现 iFoo。然后 Bar 可以与 FooEx 而不是 Foo 建立关联。

    【讨论】:

      猜你喜欢
      • 2011-07-14
      • 2018-09-09
      • 2023-04-10
      • 2014-07-30
      • 1970-01-01
      • 2014-08-05
      • 2013-01-10
      • 2013-06-22
      • 2012-03-27
      相关资源
      最近更新 更多