0
Fixed

Декоратор, композиция, UML

bridennis 2 years ago updated by Alexander Shvets 1 year ago 4

Доброе время!

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

Under review

Это отличный вопрос!


Если хочется быть на 100% правильным, то в таких случаях следует писать «композиция/агрегация», но обычно это сокращают до «композиции» т.к. при сравнении с наследованием не важно что конкретно из них имелось в виду. 


Такое сокращение повелось ещё со времён книги GoF, где авторы противопоставляли наследованию именно композицию (хотя имелось в виду любое отношение вложенности). Мне лично кажется, что слово композиция более понятно обычному человеку с улицы, отсюда и имеем такое сокращение.


А вы что об этом думаете?

Александр, спасибо за ответ!


Это действительно очень тонкий момент, который я понял так:

(Disclaimer: осознавая слабость своих знаний, моё видение этой темы может быть далеко от истины)


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


Именно поэтому, поясняя Декоратор, GoF говорят о композиции, но дают нам UML модель с агрегацией.


Что Вы скажете по поводу такой мысли?

На мой взгляд, вы сделали отличный вывод. Со всем согласен.