
- •Передмова
- •Розділ 1 об'єктний підхід у програмуванні
- •1.1.Причини виникнення ооп
- •1.1.1.Складність об'єкта дослідження
- •1.1.2.Складність процесу розробки програмного забезпечення
- •1.1.3.Складність опису окремих елементів
- •1.2.Парадигма ооп
- •1.3.Історія розвитку ооп
- •Розділ 2 об'єкти й класи: інкапсуляція
- •2.1.Структура об'єкта й класу
- •2.2.Особливості опису класів у мовах ооп
- •2.2.1.Опис класів в SmallTalk
- •2.2.3.Опис класів в Delphi
- •2.2.4.Опис класів в Java
- •2.3.Поля даних та їх ініціалізація
- •2.3.1.Визначення полів даних в SmallTalk
- •2.3.3.Визначення полів даних в Delphi
- •2.3.4.Визначення змінних в Java
- •2.4.Доступ до даних
- •2.4.1.Доступ до даних в SmallTalk
- •2.4.3.Доступ до даних в Delphi
- •2.4.4.Доступ до даних в Java
- •2.5.Спеціальні змінні
- •2.5.1.Спеціальні змінні в SmallTalk
- •2.5.3.Спеціальні змінні в Java
- •2.5.4.Спеціальні змінні в Delphi
- •2.6.Посилання
- •2.6.1.Визначення посилань в SmallTalk, Delphi і Java
- •2.7.Методи
- •2.7.1.Загальна схема визначення методу
- •2.7.2.Визначення методів в SmallTalk
- •2.7.4.Визначення методів в Delphi
- •2.7.5.Визначення методів в Java
- •2.8."Дружні" методи
- •2.8.2.Аналог дружніх функцій в Delphi
- •2.9.Конструктори й деструктори
- •2.9.1.Конструктори й деструктори в SmallTalk
- •2.9.3.Конструктори й деструктори в Delphi
- •2.9.4.Конструктори й деструктори в Java
- •2.10.Властивості
- •2.10.1.Властивості в Delphi
- •2.10.2.Властивості в Java
- •2.12.Абстрактні методи
- •Розділ 3 успадкування
- •3.1.Форми успадкування
- •3.2.Успадкування в SmallTalk
- •3.3.1.Віртуальне успадкування
- •3.3.2.Правило сумісності типів
- •3.3.3.Використання конструкторів і деструкторів при успадкуванні
- •3.4.Успадкування в Delphi
- •3.4.1.Ієрархія класів в Delphi
- •3.4.2.Створення нових компонентів
- •3.5.Успадкування в Java
- •3.5.1.Використання ключового слова super
- •3.5.2.Клас Object
- •Розділ 4 поліморфізм
- •4.1.Віртуальні методи
- •4.2.1.Механізм пізнього зв'язування
- •4.2.2.Таблиця віртуальних методів
- •4.3.Поліморфізм в Delphi
- •4.3.1.Заміщення віртуальних і динамічних методів
- •4.3.2.Приведення типів
- •4.4.Поліморфізм в Java
- •4.5.Поліморфізм в SmallTalk
- •5.1.Потокові класи
- •5.1.1.Ієрархія потокових класів
- •5.1.2.Форматоване введення/ виведення
- •5.1.3.Маніпулятори
- •5.1.4.Введення/виведення у файл
- •5.2.Контейнерні класи
- •5.2.1.Ітератори
- •5.2.2.Визначення контейнерних класів
- •5.2.3.Стандартні контейнерні класи
- •5.3.1.Параметиізовані класи (шаблони)
- •5.3.2.Ітератори stl
- •5.3.3.Узагальнені алгоритми
- •Література
- •Додатки лабораторна робота №1 об'єкти й повідомлення в smalltalk
- •Лабораторна робота №2 класи й методи в smalltalk
- •Листинг 3.1
- •Листинг 3.2
- •Листинг 3.3
- •Лабораторна робота 5 компоненти в delphi
- •Лабораторна робота 6 меню й вікна в delphi
- •Лабораторна робота 7 розробка меню в java
- •Лабораторна робота 8 робота з подіями в java
2.12.Абстрактні методи
У всіх розглянутих мовах ООП можуть бути оголошені абстрактні методи без вказівки їхньої реалізації.
У С++ ці методи називаються чистими віртуальними функціями:
сlass A {...………......
virtual void f()=0;
………………};
Клас, що містить, принаймні, одну чисту віртуальну функцію, називається абстрактним. Для нього не можна створити об'єкти. Можна створити підклас даного класу, у якому абстрактний метод повинен бути реалізований. І тоді можна створити об'єкт підкласу.
В Java абстрактні класи й методи оголошуються шляхом використання слова abstract:
public abstract class A {
……………………......
public abstract void f();
………………………}
Клас є абстрактним, якщо він містить хоча б одну абстрактну функцію. Існують класи, у яких всі функції є абстрактними. Такі класи називається інтерфейсами:
public interface B {
void h();
void g();
…………………}
В інтерфейсах всі методи мають специфікатори public і abstract за замовчуванням.
В Delphi також можуть бути визначені абстрактні класи, які не мають конструкторів. Методи цього класу повинні закінчуватися ключовим словом abstract:
procedure SetData(...…....), abstract;
Таким чином, абстрактні класи визначають деяку функціональність без реалізації. Реалізація виробляється в класі-нащадку. Більш докладно абстрактні методи розглядаються в розділі 4.
Контрольні питання:
З яких розділів складається визначення класу?
Який стан об'єкта визначають поля даних?
Що задають методи об'єкта?
Змінні яких видів можуть бути задані при визначенні класу?
Як розрізняються змінні в мові Smalltalk?
Як викликаються методи в Smalltalk?
Як оголосити змінну класу в С++?
Які рівні доступу до змінних й методів існують в Object Pascal?
Чи можна конструктор оголосити в закритій частині визначення класу?
Чи існують покажчики на об'єкти в Java?
Як визначити абстрактну функцію в С++?
Що є аналогом дружніх функцій в Delphi?
Які існують способи визначення функцій-операцій в С++?
Яким чином визначаються властивості в Java?
Розділ 3 успадкування
3.1.Форми успадкування
Через успадкування реалізується метод ієрархії, що використовується при створенні програмних систем. Тиммоті Бадд уводить наступні форми успадкування:
Спеціалізація. Дочірній клас є більше конкретним, приватним або спеціалізованим випадком батьківського класу. Інакше кажучи, дочірній клас є підтипом батьківського класу.
Специфікація. Батьківський клас описує поведінку, що реалізується в дочірньому класі, але залишилася нереалізованою у батьківському класі.
Конструювання. Дочірній клас тільки використовує методи, надані батьківським класом, але змінює або модифікує їхню роботу. Дочірній клас не є підтипом батьківського класу.
Узагальнення. Дочірній клас модифікує або перевизначає деякі методи батьківського класу з метою одержання об'єкта більше загальної категорії.
Розширення. Дочірній клас додає нові функціональні можливості до батьківського класу, але не міняє успадковану поведінку.
Обмеження. Дочірній клас обмежує використання деякі методів батьківського класу.
Варіювання. Дочірній і батьківський класи є варіаціями на одну тему, і зв'язок «клас-підклас» довільний.
Комбінування. Дочірній клас успадковує риси більш ніж одного батьківського класу. Це, так зване, множинне успадкування.
Перераховані форми успадкування можуть проявлятися двома способами:
Просте успадкування - будь-який клас має тільки одного предка. Вся ієрархія має вигляд дерева (рис. 3.1).
Р
ис.
3.1. Ієрархія простого успадкування
М
ножинне успадкування - клас має кілька батьківських класів (рис.3.2).
Рис. 3.2. Ієрархія множинного успадкування
При спадкуванні кожний об'єкт-нащадок тим або іншим способом використовує властивості батьківського класу. Перевага успадкування з одним предком у тім, що його функціональні можливості успадковуються всіма об'єктами. Таким чином, гарантується, що всі об'єкти мають загальний мінімальний рівень функціональності. Однак така ієрархія стосується всіх абсолютно класів, і в цьому складається її недолік.