Наследование против композиции
Наследование и композиция - это две важные концепции, которые можно найти в ООП (объектно-ориентированное программирование). Проще говоря, и Composition, и Inheritance имеют дело с предоставлением дополнительных свойств или поведения классу. Наследование - это способность класса наследовать свойства и поведение родительского класса, расширяя его. С другой стороны, Composition - это способность класса содержать объекты разных классов в качестве данных-членов..
Что такое наследование?
Как упоминалось выше, Inheritance - это способность класса наследовать свойства и поведение от родительского класса, расширяя его. Наследование по существу обеспечивает повторное использование кода, позволяя расширять свойства и поведение существующего класса вновь определенным классом. Если класс A расширяет B, то класс B называется родительским (или суперклассом), а класс A называется дочерним (или производным классом / подклассом). В этом примере сценария класс A наследует все открытые и защищенные атрибуты и методы суперкласса (B). Подкласс может опционально переопределять (предоставлять новую или расширенную функциональность методам) поведение, унаследованное от родительского класса..
Наследование представляет собой отношение «есть» в ООП. По существу это означает, что A также является B. Другими словами, B может быть классом с общим описанием определенной сущности реального мира, но A определяет определенную специализацию. В реальных задачах программирования класс Person может быть расширен для создания класса Employee. Это называется специализация. Но вы также можете сначала создать класс Employee, а затем обобщить его до класса Person (т.е. обобщение). В этом примере Сотрудник будет иметь все свойства и поведение Лица (т. Е. Сотрудник также является Лицом) и может также содержать некоторые дополнительные функции (таким образом, Персона не является Сотрудником)..
Что такое композиция?
Композиция - это способность класса содержать объекты разных классов в качестве данных-членов. Например, класс A может содержать объект класса B в качестве члена. Здесь все открытые методы (или функции), определенные в B, могут быть выполнены в классе A. Класс A становится контейнером, а класс B становится отдельным классом. Композиция также упоминается как контейнеровоз. В этом примере можно сказать, что класс A составлен из класса B. В ООП Composition представляет отношение has-a. Важно отметить, что, хотя у контейнера есть доступ для выполнения всех открытых методов содержащегося в нем класса, он не может изменять или предоставлять дополнительные функции. Когда возникает проблема программирования в реальном мире, объект класса TextBox может содержаться в классе Form, и, таким образом, можно сказать, что Form содержит TextBox (или, альтернативно, Form состоит из TextBox).
В чем разница между наследованием и составом?
Хотя Inheritance и Composition - это две концепции ООП, они весьма различны в том, что они позволяют программисту достичь. Наследование - это способность класса наследовать свойства и поведение от родительского класса путем его расширения, тогда как Composition - это способность класса содержать объекты разных классов в качестве данных-членов. Если класс расширен, он наследует все открытые и защищенные свойства / поведение, и эти поведения могут быть переопределены подклассом. Но если класс содержится в другом, контейнер не получает возможность изменять или добавлять поведение в содержащийся. Наследование представляет собой отношение «есть» в ООП, а композиция представляет собой отношение «есть».