Глядя на приведенные выше термины, мы можем предположить, что оба имеют какое-то отношение к отношениям между объектами. Давай увидим это!
Наследование - это процесс, при котором объект наследует характеристики от предков.
Композиция. Это форма ассоциации, при которой сущности сильно зависят от других сущностей, а составной объект не может существовать без других сущностей. В терминах языка программирования «Экземпляр другого класса с желаемыми функциями» будет использоваться внутри объекта для достижения полиморфного поведения и возможности повторного использования.
Помимо определения, оба термина также являются принципами объектно-ориентированного дизайна, и, эффективно используя их, мы можем создать чистый, гибкий и надежный дизайн.
Теперь вы должны задаться вопросом, когда использовать композицию вместо наследования и наоборот, верно?
Ответ довольно прост. Если между объектами существует связь «есть», используйте «Композицию». Если существует связь «есть-а», используйте «Наследование». Давайте посмотрим на это на примерах.
- Воробей - птица.
- В доме есть вентилятор.
- В машине есть двигатель.
- Ноутбук имеет дисплей.
- Манго - это фрукт.
У нас есть ответ на вопрос, когда использовать какой принцип, давайте рассмотрим плюсы и минусы каждого из них.
Преимущества композиции.
- Изменение класса не влияет на поведение зависимого класса.
- Легко добавить новую реализацию подкласса.
- Возможность повторного использования кода.
- Легко проверить.
Недостатки композиции.
- Увеличивает номер объекта.
- Требуется больше времени и усилий.
Преимущества наследования.
- Возможность повторного использования кода.
- Динамическое связывание и полиморфизм.
Недостатки наследования.
- Изменение интерфейса суперкласса может повлиять на поведение дочернего класса.
- Прервать инкапсуляцию, использовать свойство дочернего класса и метод родительского класса и внести изменения, которые делают дочерний класс хрупким.
Резюме.
Принцип композиции имеет большее преимущество перед наследованием, и, эффективно используя оба принципа (посмотрите на сценарий, подумайте, решите и выполните рефакторинг), мы можем создать чистый, гибкий и надежный дизайн.