2008-09-18 8 views
1

Comment représenter une relation d'agrégation entre deux classes dans UML, de sorte que chaque classe ait un lien avec l'interface de l'autre classe, et non avec la classe d'implémentation?Agrégation UML lorsque les interfaces sont utilisées

E.g. J'ai une classe Foo qui implémente iFoo, et Bar qui implémente iBar. Foo doit avoir une variable membre de type iBar, et Bar doit avoir une variable membre de type iFoo.

Si je crée une agrégation entre les deux classes d'implémentation, le membre sera du type de la classe d'implémentation et non de la superclasse. Et les agrégations entre les interfaces ne sont pas valides dans UML (et n'ont pas beaucoup de sens).

Répondre

1

Pouvez-vous ne pas Foo (implémentation) agréger iBar (interface)? Cela me semble la bonne façon de décrire cette relation.

donc quelque chose comme ceci:

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

Il semble que les marqueurs d'agrégation soient placés aux mauvaises extrémités des associations ... A part cela, ce diagramme représente exactement ce qui était requis. – Yarik

1

interfaces ne sont pas instanciable, donc Bar ne peut pas avoir un attribut de type IFoo, et Foo ne peut pas avoir un attribut de type iBar.

Vous dites que vous ne voulez pas d'association entre Bar et Foo. Vous pouvez donc créer une nouvelle classe (FooEx) et faire en sorte que cette classe implémente iFoo. Alors Bar peut avoir une association à FooEx au lieu de Foo.

Questions connexes