Перейти к основному содержимому

Предпочитайте композицию наследованию

Предпочитайте агрегацию композиции.

Наследование более жесткая связь, чем композиция.

Если наследование можно выразить словом «является» (автомобиль является транспортом), то композицию — словом «состоит из» (автомобиль состоит из двигателя, колес, ...).

Этот принцип распространяется и на агрегацию — более свободный вид композиции, когда два объекта являются равноправными, и ни один из них не управляет жизненным циклом другого. Оцените разницу: автомобиль содержит и водителя, но тот может выйти и пересесть в другой автомобиль или вообще пойти пешком самостоятельно.

https://metanit.com/sharp/patterns/1.2.php

Наследование:

  • Мурка является кошкой.

Композиция:

  • Унверситет состоит из кафедр.
  • Контейнер состоит из элементов. Элементы могут существовать только как часть контейнера.

Агрегация:

  • Кафедра содержит профессоров.
  • Контейнер содержит элементы. Элементы могут существовать отдельно.
  • Ведущий объект знает о ведомых объектах и содержит из.

Зависимость:

  • Ведомый объект может быть изменен, если будут изменения в ведущем объекте.

Ассоциация:

  • Один объект знает о существовании другого объекта.
  • Ассоциативный массив например.
  • Один класс имеет поле, в котором хранится экземпляр другого класса.

Реализация:

  • Класс реализует элементы интерфейса.

Зависимость (самая слабая связь)
Ассоциация - Реализация
Агрегация - Наследование
Композиция (самая сильная связь)

Например можно использовать паттерн Стратегия.