Різниця між складом і спадщиною

У програмуванні багаторазовий код - це використання існуючого програмного забезпечення для побудови нового програмного забезпечення з використанням принципів багаторазового використання. Повторне використання коду вважається фундаментальною продуктивною функціональністю в інтенсивно розвинених інформаційних технологіях. Він просувається в об'єктно-орієнтованих системах шляхом встановлення зв’язків між класами. Є два основні способи встановлення цих зв'язків в об'єктно-орієнтованому програмуванні - Спадництво та Склад. Реалізація успадкування - це один із способів співвідношення класів, але OOP забезпечує новий вид взаємозв'язку між класами, який називається складом. Встановлюючи зв'язок між новими та існуючими класами, новий клас може успадковувати або вбудовувати код з одного або декількох існуючих класів.

В ООП успадкування - це методологія, за допомогою якої об'єкт набуває характеристик одного або декількох інших об'єктів. Це один з найпотужніших інструментів реалізації коду повторного використання в OOP. Використовуючи спадщину, новий клас можна створити, встановивши стосунки батько-дитина з існуючими класами. Об'єктна композиція є альтернативою успадкуванню класів. Використання об'єкта всередині іншого об'єкта відоме як композиція. У багатьох випадках ви хочете використовувати об'єкт як поле в межах іншого класу, тому що легко створювати складні класи, використовуючи раніше написані, добре розроблені класи як компоненти. Це називається композицією. Ну, і успадкування, і склад забезпечують еквівалентну функціональність у багатьох випадках, об'єктна композиція є кращою моделлю повторного використання, ніж успадкування класів. У цій статті порівнюються два підходи.

Що таке спадщина?

Спадкування - один з найпотужніших інструментів реалізації коду повторного використання в об'єктно-орієнтованому програмуванні. Він позначає функціональність, завдяки якій один об’єкт набуває характеристик одного або декількох інших об'єктів. Спадкування в C ++ означає, що ви можете створювати класи, які отримують їх атрибути з існуючих класів. Це означає, що ви спеціалізуєте клас для створення взаємозв'язку між класами, що призводить до міцного зв’язку між базовим та похідним класами. Реалізація успадкування сприяє повторному використанню коду, оскільки нові класи створюються з існуючих класів. Успадкування класів також полегшує модифікацію повторного використання. Але класове успадкування має і деякі недоліки. По-перше, оскільки успадкування визначено під час компіляції, ви не можете змінити реалізації, успадковані від батьківських класів під час виконання.

Що таке склад?

OOP забезпечує ще одне співвідношення між класами під назвою композиція, яке також відоме як співвідношення has-a. Якщо особливості одного об’єкта потребують частини іншого об'єкта, взаємозв'язок вимагає складання. Для складання класу з існуючих класів об'єкт кожного класу повинен бути оголошений членом нового класу. Простими словами, використання об'єкта в межах іншого об'єкта називається складом. Багато разів ви можете використовувати об’єкт як поле в межах іншого класу. Ви використовуєте об'єкт всередині класу в композиції. На відміну від успадкування класів, композиція об'єктів визначається динамічно під час виконання через об'єкти, що отримують посилання на інші об'єкти. Крім того, композиція забезпечує кращий спосіб використання об'єкта без шкоди для внутрішніх деталей об'єкта, тобто композиція корисна.

Різниця між складом і спадщиною

Підхід

Хоча і успадкування, і склад сприяють повторному використанню коду в об'єктно-орієнтованій системі, встановлюючи зв'язки між класами, і вони забезпечують багатофункціональну функціональність багатьма способами, вони використовують різні підходи. За допомогою успадкування ви можете створювати класи, які отримують їх атрибути з існуючих класів, тож використовуючи спадкування для створення класу, ви можете розширити на існуючий клас. Навпаки, використання об'єкта в межах іншого об'єкта відоме як композиція. Об'єктна композиція є альтернативою успадкуванню класів. Якщо особливості одного об’єкта потребують частини іншого об'єкта, взаємозв'язок вимагає складання.

Відносини

У спадщині ви спеціалізуєте клас для створення взаємозв'язку "є-а" між класами, що призводить до сильної зв'язку між базовим і похідним класами. Це дає можливість проектувати ієрархію класів, а ієрархія починається з самого загального класу і переходить до більш конкретних класів. Реалізуючи успадкування, функції членів одного класу набувають властивостей іншого класу, не кодуючи їх явно всередині класу. У композиції ви використовуєте об'єкт всередині класу, і будь-які запити до об'єкта передаються об'єкту. Внутрішні деталі не піддаються одна одній у композиції, тому це стосунки "має-є".

Впровадження

Успадкування класів визначається під час компіляції, тому ви не можете змінити реалізації, успадковані від батьківських класів під час виконання. Оскільки успадкування розкриває підклас до деталей його здійснення батьком, воно часто порушує інкапсуляцію. Будь-які зміни в батьківському класі відобразяться в підкласі, що може створити проблеми при спробі повторного використання підкласу. Об'єктна композиція, навпаки, визначається динамічно під час виконання через об'єкти, що набувають посилань на інші об'єкти. А оскільки доступ до об'єктів здійснюється виключно через їхні інтерфейси, він не порушує інкапсуляцію. Будь-який об'єкт може бути замінений під час виконання іншим об'єктом, якщо він має той самий тип.

Склад проти спадкування: Порівняльна діаграма

Короткий зміст складу проти спадкування

У багатьох випадках ви хочете використовувати об’єкт як поле в межах іншого класу, оскільки складні класи легше створити, використовуючи раніше написані, добре розроблені класи. Тут ви використовуєте композицію. Спадкування забезпечує спосіб повторного використання коду шляхом розширення класу з мінімальними зусиллями, саме тому успадкування є цінним інструментом встановлення зв’язків між класами. Загалом, переважно використовувати композицію, оскільки вона забезпечує спосіб використання об'єкта без шкоди для внутрішніх деталей об'єкта, де композиція є корисною. Спадщина не без проблем, але, як і спадкування, композиція об'єктів викликає подібні проблеми щодо продуктивності щодо створення та знищення об'єкта..