使用接口时的 UML 聚合

发布于 2024-07-05 08:41:36 字数 239 浏览 5 评论 0原文

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

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

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

How do I represent an aggregation relation between two classes in UML, such that each class has a link to the other class's interface, not the implementing class?

E.g. I have a class Foo that implements iFoo, and Bar that implements iBar. Foo should have a member variable of type iBar, and Bar should have a member variable of type iFoo.

If I create an aggregation between the two implementing classes, then the member will be of the type of the implementing class, not the superclass. And aggregations between interfaces are invalid in UML (and don't make much sense).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

末が日狂欢 2024-07-12 08:41:36

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

所以像这样:

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

Can you not have Foo (implementation) aggregate iBar (interface)? That seems to me the proper way to describe this relationship.

So something like this:

-----------------      -----------------
| <<interface>> |      | <<interface>> |
|     iFoo      |<>  <>|     iBar      |
-----------------  \/  -----------------
        ^          /\          ^
        |         /  \         |
-----------------/    \-----------------
|      Foo      |      |      Bar      |
-----------------      -----------------
長街聽風 2024-07-12 08:41:36

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

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

Interfaces are not instantiable, so Bar cannot have an attribute of type iFoo, and Foo cannot have an attribute of type iBar.

You say you don't want an Association between Bar and Foo. So you could create a new Class (FooEx) and have that Class implement iFoo. Then Bar can have an Association to FooEx instead of Foo.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文