Читаю книгу Мэтта Зандстра - "PHP объекты, шаблоны и методики программирования", дошёл до раздела UML, а именно до объяснения видов отношений классов и у меня повяилось несколько вопросов, если с наследованием всё понятно, то вот разница между ассоциацией и агрегацией/композицией не совсем ясна. Всегда думал, что агрегация отличается от композиции лишь тем, что при агрегации мы инстанцируем зависимость во вне, и передаём её в конструктор зависимого класса, а при композиции мы создаём зависимость непосредственно внутри конструктора (new). Я подразумевал, что агрегация и композиция это лишь частные случаи ассоциации, но оказывается у них даже разные обозначения на UML диаграммах. При агрегации у нас идёт линия с незакрашеным ромбом, при композиции - с закрашенным, а вот при ассоциации либо просто линия, либо незамкнутая стрелка. При этом в книге написано, что
ассоциация происходит, когда объявляется, что в свойстве класса содержится ссылка на экземпляр другого класса
, но ведь это достигается с помощью агрегации и композиции (мы передаём ссылку в конструктор, либо создаём объект в конструкторе и присваеваем ссылку полю класса). ЯННП. Получается ассоциация действительно это общий случай агрегации/композиции? Тогда зачем о ней написано отдельно и почему она имеет свои обозначения на UML диаграммах?
На мой взгляд, тут дело в том, что UML может применяться в разных случаях: для проектирования, документации, обмена идеями на салфетках и даже генерации кода.
При этом не всегда есть необходимость обозначать реализацию ассоциаций. Сотрудник может работать в Отделе, но в конкретной реализации это может быть сделано через какой-нибудь id по LazyLoad, который сходит в базу, через Repository и так далее. На определённом уровне восприятия все эти подробности не имеют особого значения, и достаточно просто нарисовать линию ассоциации, чтобы коллеги поняли общий замысел. Ну а при необходимости явно обозначить судьбы ассоциированных объектов, используют стрелочки агрегации/композиции.
Так что ассоциация действительно это общий случай агрегации/композиции. А UML просто недостаточно изящный.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Пожалуйста скажите почему у меня здесь подчёркивается красным
Почему при вводе данных в консоль, например 100 * 5, получается не 5000, а ошибка?
Есть JSP страница, на которой меняется какой-то текст, как можно изменения текста передавать на контроллер? То есть при нажатии на кнопку "отправить"...