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