Агрегация UML при использовании интерфейсов - PullRequest
1 голос
/ 18 сентября 2008

Как представить отношение агрегации между двумя классами в UML, чтобы каждый класс имел ссылку на интерфейс другого класса, а не на реализующий класс? например. У меня есть класс Foo, который реализует iFoo, и Bar, который реализует iBar. Foo должна иметь переменную-член типа iBar, а Bar должна иметь переменную-член типа iFoo.

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

Ответы [ 2 ]

1 голос
/ 19 сентября 2008

Интерфейсы не создаются, поэтому Bar не может иметь атрибут типа iFoo, а Foo не может иметь атрибут типа iBar.

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

1 голос
/ 18 сентября 2008

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

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

-----------------      -----------------
| <<interface>> |      | <<interface>> |
|     iFoo      |<>  <>|     iBar      |
-----------------  \/  -----------------
        ^          /\          ^
        |         /  \         |
-----------------/    \-----------------
|      Foo      |      |      Bar      |
-----------------      -----------------
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...