Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
То что меняю(2).doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
308.22 Кб
Скачать

3.2 Одиночне успадкування

Клас може мати «підкласи», спеціалізовані, розширені версії надкласу. Можуть навіть утворюватись цілі дерева успадкування. Наприклад, клас Собака може мати підкласи Коллі, Пекінес, Вівчарка і т.п. Так, Сірко може бути екземпляром класу Вівчарка. Підкласи успадковують атрибути та поведінку своїх батьківських класів, і можуть вводити свої власні. Успадкування може бути одиничне (один безпосередній батьківський клас) та множинне (кілька батьківських класів). Це залежить від вибору програміста, який реалізовує клас та мови програмування.

Множинне успадкування — властивість деяких об'єктно орієнтовних мов програмування, в яких класи можуть успадкувати поведінку і властивості більш ніж від одного суперкласу (безпосереднього батьківського класу). Це відрізняється від простого успадкування, у випадку якого клас може мати тільки один суперклас.

Одиничне успадкування — властивість деяких об'єктно орієнтовних мов програмування, в яких класи можуть успадкувати поведінку і властивості тільки від одного класу.

4. Поліморфізм

4.1 Загальні поняття

Поліморфізм — концепція в програмуванні, відповідно до якої використовується спільний інтерфейс для обробки даних різних спеціалізованих типів. Поліморфізм - можливість об'єктів з однаковою специфікацією мати різну реалізацію. Мова програмування підтримує поліморфізм, якщо класи з однаковою специфікацією можуть мати різну реалізацію - наприклад, реалізація класу може бути змінена в процесі успадкування.

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

Поліморфізм — один з трьох найважливіших механізмів об'єктно-орієнтованого програмування. Поліморфізм дозволяє писати більш абстрактні програми і підвищити коефіцієнт повторного використання коду.

Спільні властивості об'єктів об'єднуються в систему, яку можуть називати по різному: інтерфейс, клас. Спільність має зовнішнє і внутрішнє вираження. Зовнішня спільність проявляється як однаковий набір методів з однаковими іменами і сигнатурами (типами аргументів і результатів).Внутрішня спільність є однакова функціональність методів. Її можна описати інтуїтивно виразити у вигляді строгих законів, правил, яким повинні підкорятись методи. Можливість приписувати різну функціональність одному методу (функції, операції) називається перевантаженням методу.

4.2 Поліморфізм і його реалізація через віртуальні функції

Поліморфізм - основоположна концепція об'єктно-орієнтованого програмування Віртуальна функція - це функція, оголошена з ключовим словом virtual в базовому класі і перевизначена в одному або в декількох похідних класах. Віртуальні функції є особливими функціями, тому що при виклику об'єкта похідного класу за допомогою вказівника або посилання на нього С ++ визначає під час виконання програми, яку функцію викликати, грунтуючись на типі об'єкта. У мові С++ ключове слово virtual надає функції можливість стати поліморфічною, якщо вона буде переписана (перевизначена) в одному класі-нащадку або більше. Однак слово virtual аж ніяк не є необхідним, так як будь-яка функція, перевизначення в класі-нащадку, може бути поліморфічною. Компілятору тільки потрібно генерувати код для істинно поліморфічних процедур.

Якщо автор батьківського класу в мові С ++ не передбачає, що клас-нащадок захоче перевизначити функцію, то він не зможе зробити її і поліморфічною.

С++ також дозволяє функціям бути перевантаженими, в такій ситуації виклик потрібної функції залежить від аргументів. Різниця між перевантаженими і поліморфічне (перевизначеними) функціями полягає в тому, що в перевантажених функціях потрібна, визначається при компіляції, а в разі поліморфічною визначається при виконанні.

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