Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
13
Добавлен:
30.05.2020
Размер:
194.56 Кб
Скачать

2. Основні засоби розробки класів

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

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

Якщо безпосередній батько єдиний, то спадкоємство називається простим, а якщо таких класів декілька - те множинним. При цьому клас батько (або класи батьки) і клас нащадок утворюють ієрархію (мал. 2).

Наявність механізму спадкоємства в мові програмування дозволяє повторно не визначати в класі вже описані параметри і властивості об'єктів, похідний клас їх просто «успадковує».

Приклад. Спадкоємство (клас Окно_меняющєє_цвет). Побудуємо на базі класу Вікно клас-нащадок, який може змінювати колір вікна на екрані. Для цього до батьківського класу досить додати метод Ізменіть_цвет:

Клас Окно_меняющєє_цвет - батько: клас Вікно:

метод Ізменіть_цвет(аСоlог);

Кінець опису.

Клас Окно_меняющєє_цвет містить всі поля батьківського класу і всі його методи. Додатково об'єкти типу Окно_меняющєє_цвет можуть міняти колір вікна на вказаний в повідомленні «Ізменіть_цвет» (мал. 3).

При множинному спадкоємстві, реалізованому, наприклад, в C++, успадковуються поля і методи всіх батьків. В тому випадку, якщо серед батьків є класи, що належать одній ієрархії, відбувається дублювання полів і методів, успадкованих від загальних батьків. Для того, щоб уникнути неоднозначності, в C++ введено поняття віртуального спадкоємства, при використанні якого віртуально успадковані поля і методи не дублюються.

Просте спадкоємство Множинне спадкоємство

Клас-батько

Клас-батько 1

Клас-нащадок

Клас-батько 2

Клас-нащадок

Мал. 2 Ієрархія класів при різних видах спадкоємства

П

Окно

Вікно

оля: X1, Y1, X2, Y2, Color

Методи

Ініціалізувати (X1, Y1, X2, Y2, аColor)

Зобразити

Вікно_змінює_колір

Метод: Змінити колір(аColor)

Мал. 3 Ієрархія класів Вікно і Окно_меняющєє_цвет

Таким чином, в ієрархічному дереві класів у міру видалення від кореня ми зустрічає все більш складні класи, екземплярами яких будуть об'єкти з складнішою структурою і поведінкою.

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

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

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

Примітка. Термін «поліморфізм» в програмуванні, відповідно до свого початкового сенсу («різноманіття»), використовується для позначення вбудованого механізму визначення відповідності коди функції типу параметрів. Такий механізм реалізується не тільки в засобах ООП.

Розрізняють декілька термінів, пов'язаних з конкретними механізмами реалізації поліморфізму для різних випадків:

чистий поліморфізм - використовується для позначення того, що один код функції може по-різному інтерпретуватися залежно від типу аргументів; використовується в мовах високого рівня абстракції, наприклад, в мові LISP або SMALLTALK;

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

перевизначення (простій поліформізм) - використовується в ООП за наявності різних визначень методів в ієрархії класів, конкретний метод визначається типом об'єкту при компіляції програми (раннє скріплення), методи називаються статичними поліморфними;

поліморфні об'єкти (складний поліморфізм) - використовуються в ООП за наявності різних визначень методів в ієрархії класів - конкретний метод також визначається типом об'єкту, але в процесі виконання програми (пізнє скріплення),меюды називаються віртуальними поліморфними (розглянуті далі);

узагальнені функції або шаблони - використовуються в ООП при реалізації в мові класів (наприклад, в C++), що параметризуються, параметрами такого класу є типи аргументів методів класу (розглянуті далі).

Об'єкти

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

Соседние файлы в папке Лекції