- механізм об'єктно-орієнтованого програмування (поряд з инкапсуляцией, поліморфізмом і абстракцією), що дозволяє описати новий клас на основі вже існуючого (батьківського), при цьому властивості і функціональність батьківського класу запозичуються новим класом.
Просте спадкування
Клас, від якого відбулося спадкування, називається базовим або батьківським (англ. base class). Класи, які походять від базового, називаються нащадками, спадкоємцями або похідними класами (англ. derived class). p align="justify"> Множинне успадкування
При множині спадкування у класу може бути більше одного предка. У цьому випадку клас успадковує методи всіх предків. Переваги такого підходу в більшій гнучкості. Множинне спадкування реалізовано в C + +. З інших мов, що надають цю можливість, можна відзначити Python і Ейфель. Множинне успадкування підтримується в мові UML. p align="justify">) Композиція включає в себе кілька дуже важливих складових, які й визначають, наскільки легко буде працювати з додатком. Композиція в програмуванні включає в себе розташування керуючих елементів, ефективне використання вільного простору і В«дозволено "
) Використання успадкування для побудови нових класів заощадить вам значний час і сили на програмування. Об'єктно-орієнтоване програмування широко використовує спадкування, дозволяючи вашій програмі будувати складні об'єкти з невеликих легко керованих об'єктів. p align="justify">) Усередині конструктора похідного класу ваша програма повинна викликати конструктор базового класу, вказуючи двокрапка, ім'я конструктора базового класу та відповідні параметри відразу ж після заголовка конструктора похідного класу.
) Принцип підстановки стверджує, що якщо є два класи А і В такі, що клас В є підкласом класу А (можливо, відстою в ієрархії на кілька ступенів), то ми повинні мати можливість підставити представника класу В замість представника класу А в будь-якій ситуації, причому без видимого ефекту.
) Найбільший недолік спадкування полягає в тому, що воно легко порушує один з базових принципів ООП - инкапсуляцию. Це пов'язано з тим, що фактично батьківський клас визначає поведінку дочірнього класу, а це означає, що навіть незначна зміна в батьківському класі може сильно позначитися на поведінці класу-нащадка. Плюс до всього, повторне використання коду сильно ускладнюється, якщо реалізація батька містить аспекти несумісні з завданнями нащадка. Як правило, щоб вийти з такої ситуації необхідно провести глибокий рефакторінг коду, а це не завжди можливо. p align="justify"> Композиція об'єктів будується динамічно за рахунок зв'язування одного об'єкта з іншими. При такому підході класи використовуються відповідно до їх інтерфейсом. Що чи не порушує инкапсуляцию. Використання єдиного інтерфейсу дозволяє на додаток до інкапсуляції отримати переваги поліморфізму. Тобто під час виконання програми можливо один об'єкт замінити іншим.
Лабораторна робота № 5
Тема: Множинне успадкування
Цілі роботи:
? вивчення правил визначення множинного спадкування;
? вивчення переваг і недоліків множинного спадкування;
? проблем пов'язаних з використанням множинного спадкування;
? вивчення рішень проблем;
) Створити ієрархії успадкування: студент, співробітник - практикант.
В
# include namespace std; Student {mark; imya [20]; fam [20];: Set_student (int mark, char * imya, char * fam)
{strcpy (this-> imya, imya); (this-> fam, fam);> mark = mark;
} show_1 () {<<"__" <<"=" <
}; Worker {salary; stag;: Set_Worker (int salary, double stag) {> salary = salary;> stag = stag;
} show_2 () {<<"__" <<В«zarplata =В» <
}; Practicant: public Student, public Worker
{char srok [20]; ozenka;: set_practicant (char * srok, int ozenka)
{strcpy (this-> srok, srok);> ozenka = ozenka;
} show_3 () {<<"__" <<В«srok =В» <
}
}; main () {s, w;. Set_student (1222, В«KolyaВ», В«kinimВ»);. Show_1 ();. Set_practicant (В«11juliВ», 12);. Show_3 (); <<"___" <
}
<...