Разница между составом и наследованием

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

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

Что такое наследование?

Наследование является одним из самых мощных инструментов в реализации возможности повторного использования кода в объектно-ориентированном программировании. Это относится к функциональности, с помощью которой один объект приобретает характеристики одного или нескольких других объектов. Наследование в C ++ означает, что вы можете создавать классы, которые получают свои атрибуты из существующих классов. Это означает, что вы специализируете класс для создания отношений is-между классами, что приводит к сильной связи между базовым и производным классами. Реализация наследования способствует повторному использованию кода, потому что новые классы создаются из существующих классов. Наследование классов также облегчает изменение используемой реализации. Но наследование классов тоже имеет свои недостатки. Во-первых, поскольку наследование определяется во время компиляции, вы не можете изменить реализации, унаследованные от родительских классов во время выполнения..

Что такое композиция?

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

Разница между составом и наследованием

Подходить

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

отношения

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

Реализация

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

Состав против наследования: сравнительная таблица

Резюме Состав против Наследования

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