Какие преимущества композиции перед наследованием?

Рома Никитин разместил пост 03 сентября 2018

Говорят, что композиция имеет ряд преимуществ перед наследованием, и лучше всего использовать именно композицию. Обьясните пожалуйста, почему так? Чем композиция лучше старого доброго наследования?

Отсортировать по: Стандартный | Последний | Голоса
Nefedor разместил пост 03 сентября 2018

Композиция и наследование - это кардинально разные понятия, и я не знаю как можно их сравнить вообще...

Композиция - это части одногоо класса являются экземплярами других классов.

Наследование - это одна из основных парадигм ООП, которая говорит нам, что мы можем наследовать один класс другим, при этом "заимствуя" у родительского класса все публичные элементы (поля, методы и тд) классом-наследником.

Darth Vader разместил пост 03 сентября 2018

Скажу сразу, что говорить что наследование - это плохо -- в корне не верно. Наследования в грамотных руках может принести море пользы, ровно как и вреда, если же использовать его бездумно.

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

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

Close