
- •Передмова
- •Розділ 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
3.5.1.Використання ключового слова super
Всякий раз, коли підклас повинен звернутися до свого безпосереднього суперкласу, він може зробити це за допомогою ключового слова super. Ключове слово super має дві форми використання. Перша служить для виклику конструкторів суперкласу, а друга - для доступу до змінних суперкласу.
В ієрархії класів конструктори викликаються в порядку підпорядкованості класів – від суперкласу до підкласу. Конструктори підкласів повинні викликати конструктор суперкласу, використовуючи для цього конструктор super() у найпершому операторі:
class A {
int i;
A(int a){
i=a;
}
сlass B extends A {
B(){
super(3); //присвоювання значення 3 змінній i класу А
i=4; //присвоювання значення 4 змінній i класу B
}
}
Тому що конструктори можуть бути перевантажені (відрізнятися числом або типами параметрів), super() може викликати кожен з них. Виклик потрібного конструктора буде визначатися за значеннями параметрів, зазначених в super(). Якщо super() не використовується, то викликається конструктор за замовчуванням (без параметрів) кожного суперкласу в ієрархії успадкування.
Друга форма super використовується у випадку доступу до елементів суперкласу, які сховані в підкласі, тобто мають те ж ім'я, що й у підкласі (див. також п. 2.5.3). Важливо помітити, що змінна super завжди вказує на об'єкт суперкласу найближчий по ієрархії щодо місця виклику:
class A {
int i;
}
сlass B extends A {
int i; //ця змінна приховує змінну i суперкласу
B(int a, int b){
super. i=a; //присвоювання значення змінній i класу А
i=в; //присвоювання значення змінній i класу B
}
}
3.5.2.Клас Object
В Java вся ієрархія класів будується від одного єдиного класу Object, що є суперкласом для всіх інших класів. Це означає, що змінній типу Object може бути призначене посилання на об'єкт будь-якого класу, включаючи масиви.
Клас Object визначає наступні методи, які доступні будь-якому об'єкту:
Метод |
Призначення |
clone() |
Створює новий об'єкт, що є клоном даного об'єкта |
boolean equals(<об'єкт> <об'єкт>) |
Визначає, чи є два об'єкти еквівалентними |
void finalize() |
Викликається перш, ніж невикористаний об'єкт буде знищений «збирачем сміття» |
getclass() |
Повертає клас об'єкта під час виконання |
void notify() |
Відновляє виконання потоку, що очікує на об'єкті |
void wait() |
Чекає виконання на іншому потоці |
String toString() |
Повертає рядок, що описує об'єкт |
Методи void notify(),getclass() і wait() оголошуються як final, тобто їх не можна перевизначати. Метод String toString() викликається автоматично, коли об'єкт виводиться методом println().
Контрольні питання:
У якій мові ООП допускається множинне успадкування?
В чому полягають правила ініціалізації полів даних при створенні об'єктів похідного класу?
Які правила доступу до змінних й методів класів при побудові ієрархії класів в Java?
Які етапи створення нового компонента в Object Pascal?
У чому розходження спеціальних змінних self і super в Smalltalk?
Які існують форми використання ключового слова super в Java?