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