Спадщина проти Контейнерства
Спадщина та вміст є двома важливими поняттями, знайденими в ООП (Приклад об'єктно-орієнтованого програмування: C ++). Простіше кажучи, і Containership, and Inheritance мають справу з наданням додаткових властивостей або поведінки класу. Спадкування - це здатність класу успадковувати властивості та поведінку від батьківського класу шляхом його розширення. З іншого боку, Containership - це здатність класу містити об'єкти різних класів як дані членів.
Що таке спадщина?
Як було сказано вище, Спадщина - це здатність класу успадковувати властивості та поведінку від батьківського класу шляхом його розширення. Спадкування по суті забезпечує повторне використання коду, дозволяючи розширювати властивості та поведінку існуючого класу заново визначеним класом. Якщо клас A поширюється на B, то клас B називається батьківським класом (або суперкласом), а клас A називається дочірнім класом (або похідним класом / підкласом). У цьому прикладі сценарію клас A успадкує всі відкриті та захищені атрибути та методи суперкласу (B). Підклас може необов'язково змінювати (надавати нову або розширену функціональність методам) поведінку, успадковану від батьківського класу. Спадкування являє собою "є-а" відносини в ООП. Це по суті означає, що A також є B. Іншими словами, B може бути класом із загальним описом певної сутності реального світу, але A визначає певну спеціалізацію. У реальній проблемі програмування клас Person може бути розширений, щоб створити клас Employee. Це називається спеціалізацією. Але ви також можете спершу створити клас Employee, а потім також узагальнити його до класу Person (тобто узагальнення). У цьому прикладі Працівник матиме всі властивості та поведінку Особи (тобто працівник також є Особою) і може містити деяку додаткову функціональність (так, Особа не є працівником) також.
Що таке контейнерність?
Контейнерність - це здатність класу містити об’єкти різних класів як дані членів. Наприклад, клас A міг би містити об'єкт класу B як член. Тут усі публічні методи (або функції), визначені в B, можуть бути виконані в межах класу A. Клас A стає контейнером, а клас B стає класом, що міститься. Контейнерство також називається складом. У цьому прикладі можна сказати, що клас А складається з класу В. У ООП контейнерство являє собою відношення "має-а". Важливо зазначити, що, хоча контейнер має доступ до виконання всіх відкритих методів класу, що міститься, він не в змозі змінити або надати додаткову функціональність. Якщо мова йде про реальну проблему програмування, об'єкт класу TextBox може міститися у формі Form, і, таким чином, можна сказати, що форма містить TextBox (або, як альтернатива, форма складається з TextBox).
Різниця між спадщиною і вмістом
Хоча наслідування та вміст є двома концепціями OOP, вони сильно відрізняються тим, що дозволяють програмісту досягти. Успадкування - це здатність класу успадковувати властивості та поведінку від батьківського класу шляхом його розширення, тоді як Containership - це здатність класу містити об'єкти різних класів як дані членів. Якщо клас розширений, він успадковує всі публічні та захищені властивості / поведінку, і ця поведінка може бути замінена підкласом. Але якщо клас міститься в іншому, контейнер не отримує можливості змінювати або додавати поведінку до міститься. Спадщина являє собою "є-а" відносини в ООП, тоді як Контейнерство являє собою "має-а" відносини.