2008-09-18 6 views
1

Как представить отношение агрегации между двумя классами в UML, так что каждый класс имеет ссылку на интерфейс другого класса, а не на класс реализации?Агрегирование UML при использовании интерфейсов

E.g. У меня есть класс Foo, который реализует iFoo и Bar, который реализует iBar. Foo должен иметь переменную-член типа iBar, а Bar должен иметь переменную-член типа iFoo.

Если я создаю агрегацию между двумя классами реализации, то член будет иметь тип реализующего класса, а не суперкласс. А агрегации между интерфейсами недействительны в UML (и не имеют большого смысла).

ответ

1

Можете ли вы иметь Foo (реализация) aggregate iBar (интерфейс)? Это мне кажется правильным способом описать эти отношения.

Так что-то вроде этого:

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

Похоже, что маркеры агрегации размещены на неправильных концах ассоциаций ... Кроме этого, на этой диаграмме изображено то, что требуется. – Yarik 2009-05-24 14:56:07

1

Интерфейсы не инстанциируемый, поэтому бар не может иметь атрибут типа IFoo и Foo не может иметь атрибут типа Ибар.

Вы говорите, что не хотите, чтобы Ассоциация между Бар и Фу. Таким образом, вы можете создать новый класс (FooEx) и реализовать этот класс iFoo. Тогда Bar может иметь ассоциацию FooEx вместо Foo.

 Смежные вопросы

  • Нет связанных вопросов^_^