使用接口时的UML聚合

使用接口时的UML聚合

UML aggregation when interfaces are used

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

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

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


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

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


您可以没有Foo(实现)聚合iBar(界面)吗? 在我看来,这是描述这种关系的正确方法。

所以像这样:

1
2
3
4
5
6
7
8
9
-----------------      -----------------
| <<interface>> |      | <<interface>> |
|     iFoo      |<>  <>|     iBar      |
-----------------  \/  -----------------
        ^          /\          ^
        |         /  \         |
-----------------/    \-----------------
|      Foo      |      |      Bar      |
-----------------      -----------------

推荐阅读