- •1. Об'єктно-орієнтовані мови програмування
- •2. Етапи розробки програмних систем з використанням ооп
- •2. Основні засоби розробки класів
- •Класи і члени класів
- •Спадкоємство
- •Інкапсуляція
- •Поліморфізм
- •4. Об'єктно-орієнтовані мови програмування.
- •5. Етапи розробки програмних систем з використанням ооп
2. Основні засоби розробки класів
Мови, що підтримують ООП, істотно полегшують розробникові створення нових класів за рахунок реалізації механізмів спадкоємства, композиції, наповнення і поліморфізму.
Спадкоємство. У ООП існує можливість конструювання нових складніших класів з що вже є за допомогою додавання полів і визначення нових методів (принцип ієрархічності). При цьому початковий клас, на базі якого виконується конструювання, часто називається батьком, а похідний - нащадком. Спеціальний механізм спадкоємства забезпечує класу-нащадкові можливість використання полів і методів одного або декількох батьківських класів.
Якщо безпосередній батько єдиний, то спадкоємство називається простим, а якщо таких класів декілька - те множинним. При цьому клас батько (або класи батьки) і клас нащадок утворюють ієрархію (мал. 2).
Наявність механізму спадкоємства в мові програмування дозволяє повторно не визначати в класі вже описані параметри і властивості об'єктів, похідний клас їх просто «успадковує».
Приклад. Спадкоємство (клас Окно_меняющєє_цвет). Побудуємо на базі класу Вікно клас-нащадок, який може змінювати колір вікна на екрані. Для цього до батьківського класу досить додати метод Ізменіть_цвет:
Клас Окно_меняющєє_цвет - батько: клас Вікно:
метод Ізменіть_цвет(аСоlог);
Кінець опису.
Клас Окно_меняющєє_цвет містить всі поля батьківського класу і всі його методи. Додатково об'єкти типу Окно_меняющєє_цвет можуть міняти колір вікна на вказаний в повідомленні «Ізменіть_цвет» (мал. 3).
При множинному спадкоємстві, реалізованому, наприклад, в C++, успадковуються поля і методи всіх батьків. В тому випадку, якщо серед батьків є класи, що належать одній ієрархії, відбувається дублювання полів і методів, успадкованих від загальних батьків. Для того, щоб уникнути неоднозначності, в C++ введено поняття віртуального спадкоємства, при використанні якого віртуально успадковані поля і методи не дублюються.
Просте спадкоємство Множинне спадкоємство
Клас-батько
Клас-батько 1
Клас-нащадок
Клас-батько 2
Клас-нащадок
Мал. 2 Ієрархія класів при різних видах спадкоємства
П
Окно
Вікно
Методи
Ініціалізувати (X1, Y1, X2, Y2, аColor)
Зобразити
Вікно_змінює_колір
Метод: Змінити колір(аColor)
Мал. 3 Ієрархія класів Вікно і Окно_меняющєє_цвет
Таким чином, в ієрархічному дереві класів у міру видалення від кореня ми зустрічає все більш складні класи, екземплярами яких будуть об'єкти з складнішою структурою і поведінкою.
Спадкоємство властивостей в ієрархії істотно спрощує роботу програміста. В даний час створені бібліотеки найбільш класів, що часто зустрічаються, які можна використовувати знов і знов, будуючи на їх основі класи для вирішення різних завдань.
Простій поліморфізм. При створенні ієрархії класів може виявитися, що деякі властивості об'єктів, зберігаючи назву, змінюються по суті.
Для реалізації таких ієрархій в мові програмування повинен бути передбачений поліморфізм, що забезпечує можливість завдання різних реалізацій деякого єдиного по назві методу для класів різних рівнів ієрархії. У ООП такий поліморфізм називається простим, а методи, що мають однакову назву, - статичними поліморфними. Сукупність поліморфних методів з одним ім'ям для ієрархії класів утворює єдиний поліморфний метод ієрархії, в якому реалізація поліморфного методу для конкретного класу представляє окремий аспект.
Примітка. Термін «поліморфізм» в програмуванні, відповідно до свого початкового сенсу («різноманіття»), використовується для позначення вбудованого механізму визначення відповідності коди функції типу параметрів. Такий механізм реалізується не тільки в засобах ООП.
Розрізняють декілька термінів, пов'язаних з конкретними механізмами реалізації поліморфізму для різних випадків:
чистий поліморфізм - використовується для позначення того, що один код функції може по-різному інтерпретуватися залежно від типу аргументів; використовується в мовах високого рівня абстракції, наприклад, в мові LISP або SMALLTALK;
перевантаження (поліморфні імена функцій) - використовується, коли визначається декілька функцій з одним ім'ям - одне і те ж ім'я функції може багато разів використовуватися в різних місцях програми; вибір потрібної функції може визначати типами аргументів, областю видимості (усередині модуля, файлу, класу і так далі); якщо вибір визначається типом аргументів, то перевантаження називається параметричним; наприклад, мова C++ дозволяє розробникові виконувати параметричне перевантаження функцій поза класами;
перевизначення (простій поліформізм) - використовується в ООП за наявності різних визначень методів в ієрархії класів, конкретний метод визначається типом об'єкту при компіляції програми (раннє скріплення), методи називаються статичними поліморфними;
поліморфні об'єкти (складний поліморфізм) - використовуються в ООП за наявності різних визначень методів в ієрархії класів - конкретний метод також визначається типом об'єкту, але в процесі виконання програми (пізнє скріплення),меюды називаються віртуальними поліморфними (розглянуті далі);
узагальнені функції або шаблони - використовуються в ООП при реалізації в мові класів (наприклад, в C++), що параметризуються, параметрами такого класу є типи аргументів методів класу (розглянуті далі).
Об'єкти
Уявіть собі будь-який існуючий об'єкт, допустимий, кішку. Можна сказати, що у кішки є властивості, такі як ім'я, вік і забарвлення; у кішки також є типи поведінки, наприклад, сон, їжа і муркотання. В світі об'єктно-орієнтованого програмування, об'єкти також мають властивості і поведінку. Використовуючи об'єктно-орієнтовану техніку, ви можете змоделювати реально існуючий об'єкт, такий, наприклад, як кішка, або ж абстрактний об'єкт (допустимо, хімічний процес).