Наследование, Композиция, Агрегация

В объектно-ориентированных языках программирования существует три способа организации взаимодействия между классами (наследование, композиция, агрегация).

(1) Наследование — это когда класс-наследник имеет все поля и методы родительского класса, и, как правило, добавляет какой-то новый функционал или/и поля. Наследование описывается словом «является» (IS-A). Легковой автомобиль является автомобилем. Вполне естественно, если он будет его наследником.

Ассоциация – это когда один класс включает в себя другой класс в качестве одного из полей. Ассоциация описывается словом «имеет» (HAS-A). Автомобиль имеет двигатель. Вполне естественно, что он не будет являться наследником двигателя. (Ассоциация по сути говорит о взаимоотношении с объектом).

Выделяют два частных случая ассоциации: композицию и агрегацию.

(2) Композиция – (или её ещё называют «сильная ассоциация») это когда двигатель не существует отдельно от автомобиля. Он создается при создании автомобиля и полностью управляется автомобилем

(3) Агрегация – (или её ещё называют «слабая ассоциация») это когда экземпляр двигателя создается где-то в другом месте кода, и передается в конструктор автомобиля в качестве параметра.

Разработчик выбирает тот или иной путь основываясь на элементарной логике (является или имеет), но также принимает во внимание возможности и ограничения, которые дают и накладывают эти способы.

Если логика задана так, что дочерней структуре необходимо существовать вне зависимости от родительской, значит нужно использовать агрегацию. Если нет – композицию.

Примеры

  • Агрегация подразумевает такой тип отношений, в которых дочерняя структура может существовать независимо от родительской. Пример: Person (родительский класс) и Student (дочерний класс). Если Person будет удалён, Student всё равно продолжит существовать.
  • Композиция подразумевает такой тип отношений, в которых дочерняя структура не может существовать отдельно от родительской. Пример: House (родительский класс) и Room (дочерний класс). Room не существует отдельно от House.

Запись опубликована в рубрике Web. Добавьте в закладки постоянную ссылку.

Добавить комментарий