Виды отношений между классами?

86
23 марта 2021, 15:40

Читаю книгу Мэтта Зандстра - "PHP объекты, шаблоны и методики программирования", дошёл до раздела UML, а именно до объяснения видов отношений классов и у меня повяилось несколько вопросов, если с наследованием всё понятно, то вот разница между ассоциацией и агрегацией/композицией не совсем ясна. Всегда думал, что агрегация отличается от композиции лишь тем, что при агрегации мы инстанцируем зависимость во вне, и передаём её в конструктор зависимого класса, а при композиции мы создаём зависимость непосредственно внутри конструктора (new). Я подразумевал, что агрегация и композиция это лишь частные случаи ассоциации, но оказывается у них даже разные обозначения на UML диаграммах. При агрегации у нас идёт линия с незакрашеным ромбом, при композиции - с закрашенным, а вот при ассоциации либо просто линия, либо незамкнутая стрелка. При этом в книге написано, что

ассоциация происходит, когда объявляется, что в свойстве класса содержится ссылка на экземпляр другого класса

, но ведь это достигается с помощью агрегации и композиции (мы передаём ссылку в конструктор, либо создаём объект в конструкторе и присваеваем ссылку полю класса). ЯННП. Получается ассоциация действительно это общий случай агрегации/композиции? Тогда зачем о ней написано отдельно и почему она имеет свои обозначения на UML диаграммах?

Answer 1

На мой взгляд, тут дело в том, что UML может применяться в разных случаях: для проектирования, документации, обмена идеями на салфетках и даже генерации кода.

При этом не всегда есть необходимость обозначать реализацию ассоциаций. Сотрудник может работать в Отделе, но в конкретной реализации это может быть сделано через какой-нибудь id по LazyLoad, который сходит в базу, через Repository и так далее. На определённом уровне восприятия все эти подробности не имеют особого значения, и достаточно просто нарисовать линию ассоциации, чтобы коллеги поняли общий замысел. Ну а при необходимости явно обозначить судьбы ассоциированных объектов, используют стрелочки агрегации/композиции.

Так что ассоциация действительно это общий случай агрегации/композиции. А UML просто недостаточно изящный.

READ ALSO
Ошибка при работе с базой данных в java, androidStudio

Ошибка при работе с базой данных в java, androidStudio

Пожалуйста скажите почему у меня здесь подчёркивается красным

97
Ввод данных через консоль используя Scanner

Ввод данных через консоль используя Scanner

Почему при вводе данных в консоль, например 100 * 5, получается не 5000, а ошибка?

97
Как вытащить параметры с JSP страницы?

Как вытащить параметры с JSP страницы?

Есть JSP страница, на которой меняется какой-то текст, как можно изменения текста передавать на контроллер? То есть при нажатии на кнопку "отправить"...

108
Вопрос по интерфейсам и классам java

Вопрос по интерфейсам и классам java

Допустим есть интерфейс Soldier

103