使用接口时的UML聚合

时间:2020-03-06 14:22:00  来源:igfitidea点击:

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

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

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

解决方案

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

所以像这样:

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

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

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