【发布时间】:2008-09-18 15:43:13
【问题描述】:
如何在 UML 中表示两个类之间的聚合关系,使得每个类都有一个到另一个类接口的链接,而不是实现类?
例如我有一个实现 iFoo 的类 Foo 和一个实现 iBar 的 Bar。 Foo 应该有一个 iBar 类型的成员变量,而 Bar 应该有一个 iFoo 类型的成员变量。
如果我在两个实现类之间创建一个聚合,那么成员将是实现类的类型,而不是超类。并且接口之间的聚合在 UML 中是无效的(并且没有多大意义)。
【问题讨论】:
如何在 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 建立关联。
【讨论】: