Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

Почему нужно предпочитать композицию перед наследованием? кратко

Лекция



Привет, Вы узнаете о том , что такое композиция и наследование, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое композиция и наследование, композиция, наследование , настоятельно рекомендую прочитать все из категории Объектно-ориентированное программирование ООП.

Предпочтение композиции перед наследование м (или принципу составного повторного использования ) в объектно-ориентированном программировании (ООП) - это принцип, согласно которому классы должны достигать полиморфного поведения и повторного использования кода посредством их композиции (путем включения экземпляров других классов, реализующих желаемую функциональность), а не наследования от базовый или родительский класс. Это часто провозглашаемый принцип ООП, например, в известной книге « Шаблоны проектирования» .

Основы

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

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

Преимущества

Предпочтение композиции перед наследованием является принципом проектирования, который дает системе большую гибкость. Более естественно строить классы бизнес-доменов из различных компонентов, чем пытаться найти сходство между ними и создать семейное древо. Например, педаль газа и колесо имеют очень мало общих черт, но оба они являются жизненно важными компонентами в автомобиле. Что они могут сделать и как их можно использовать на благо автомобиля, легко определить. Об этом говорит сайт https://intellect.icu . композиция также обеспечивает более стабильный бизнес-домен в долгосрочной перспективе, поскольку она менее подвержена причудам членов иерархии. Другими словами, лучше составить то, что может сделать объект ( HAS-A ), чем расширить то, чем он является ( IS-A ).

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

Некоторые языки, особенно Go , используют исключительно композицию типов.

Недостатки

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

Этого недостатка можно избежать, используя traits, mixins, or protocol конструкции . Некоторые языки, такие как Perl 6 , предоставляют handles ключевое слово для облегчения пересылки методов. В Java Project Lombok позволяет реализовать делегирование, используя единственную аннотацию @Delegate для поля, вместо того, чтобы копировать и поддерживать имена и типы всех методов из делегированного поля. В Swift расширения могут использоваться для определения реализации протокола по умолчанию на самом протоколе, а не в реализации отдельного типа. В Котлине шаблон делегирования был включен в синтаксис языка.

Почему нужно предпочитать композицию  перед наследованием?

Эмпирические исследования

Исследование, проведенное в 2013 году для 93 программ с открытым исходным кодом (различного размера), показало, что:

Хотя не существует огромной возможности заменить наследование композицией (...), такая возможность значительна (медиана 2% случаев использования [наследования] - только внутреннее повторное использование, а еще 22% - только внешнее или внутреннее). повторное использование). Наши результаты показывают, что нет необходимости беспокоиться о злоупотреблении наследованием (по крайней мере, в программном обеспечении Java с открытым исходным кодом), но они действительно выдвигают на первый план вопрос об использовании композиции по сравнению с наследованием. Если при использовании композиции существуют значительные затраты, связанные с использованием наследования, то наши результаты показывают, что есть основания для беспокойства.

- Tempero, Ewan; Yang, Hong Yul; Noble, James (2013) , «What programmers do with inheritance in Java»

Рисунок 4. Наследование vs Агрегация

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

Заключение

Существует несколько достаточно объективных критериев для определения связности дизайна по диаграмме классов: большие иерархии наследования (глубокие или широкие иерархии), и повсеместное использование композиции, а не агрегации скорее всего говорит о сильно связанном дизайне.

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

Обилие же композиции говорит о нарушении Принципа Инверсии Зависимостей, сформулированном Бобом Мартином, которую сейчас можно выразить в терминах агрегации и композиции: предпочитайте агрегацию вместо композиции, поскольку первая стимулирует использование абстракций, а не конкретных классов.

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

Из статьи мы узнали кратко, но содержательно про композиция и наследование
создано: 2019-02-22
обновлено: 2024-11-14
16



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Объектно-ориентированное программирование ООП

Термины: Объектно-ориентированное программирование ООП