Глядя на приведенные выше термины, мы можем предположить, что оба имеют какое-то отношение к отношениям между объектами. Давай увидим это!

Наследование - это процесс, при котором объект наследует характеристики от предков.

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

Помимо определения, оба термина также являются принципами объектно-ориентированного дизайна, и, эффективно используя их, мы можем создать чистый, гибкий и надежный дизайн.

Теперь вы должны задаться вопросом, когда использовать композицию вместо наследования и наоборот, верно?

Ответ довольно прост. Если между объектами существует связь «есть», используйте «Композицию». Если существует связь «есть-а», используйте «Наследование». Давайте посмотрим на это на примерах.

  • Воробей - птица.
  • В доме есть вентилятор.
  • В машине есть двигатель.
  • Ноутбук имеет дисплей.
  • Манго - это фрукт.

У нас есть ответ на вопрос, когда использовать какой принцип, давайте рассмотрим плюсы и минусы каждого из них.

Преимущества композиции.

  • Изменение класса не влияет на поведение зависимого класса.
  • Легко добавить новую реализацию подкласса.
  • Возможность повторного использования кода.
  • Легко проверить.

Недостатки композиции.

  • Увеличивает номер объекта.
  • Требуется больше времени и усилий.

Преимущества наследования.

  • Возможность повторного использования кода.
  • Динамическое связывание и полиморфизм.

Недостатки наследования.

  • Изменение интерфейса суперкласса может повлиять на поведение дочернего класса.
  • Прервать инкапсуляцию, использовать свойство дочернего класса и метод родительского класса и внести изменения, которые делают дочерний класс хрупким.

Резюме.

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