
- •Передмова
- •Розділ 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.5.3.Спеціальні змінні в Java
В Java є дві спеціальні змінні: this і super. Змінна this використовується як посилання на поточний об'єкт усередині його методу. Як і в C++, дана змінна побічно визначається у всіх класах але може бути викликана і явно, наприклад, при прихованні або затіненні змінних:
сlass X { static int i=5; // змінна класу
void f() {int i=3; // локальна змінна методу
…………………………………………………………
System......ut.println("i локальна ="+i); // i локальна =3
System.out.println("i класу ="+this.i); // i класу =5
}
}
У даному прикладі відбувається затінення змінної i, і щоб її визначити, необхідно використати змінну this. Безпосередньо this указує на об'єкт – екземпляр класу, але в Java можна звертатися до змінних класу з його екземпляра.
Примітка: при затіненні змінних у розгляд беруться тільки імена змінних без врахування типу.
Змінна super в Java використовується для посилань на екземпляри суперкласу.
class Y extends X { // клас Y є підкласом X
static int i=4;
……………
void g() {
System......ut.println("змінна i класу Y " + this.i);
// змінна i класу Y = 4
System.out.println("змінна i класу X " + super.i);
// змінна i класу X = 5
}
}
2.5.4.Спеціальні змінні в Delphi
В Delphi є дві спеціальні змінні: Self і Sender. Змінна Self є посиланням на об'єкт-одержувач повідомлення, а Sender використовується в процедурах – оброблювачах подій. Sender вказує на об'єкт, що породив подію. Змінна Sender завжди використовується як параметр відповідного оброблювача й має тип TObject, тому необхідно здійснювати приведення типів перед її використанням:
Procedure TForm1.OnClick (Sender:TObject);
begin
(Sender as TControl).Caption:='Моя форма';
еnd;
2.6.Посилання
Відомі два основних способи передачі параметрів у функції:
за значенням;
по найменуванню - через покажчики.
Для полегшення передачі параметрів по найменуванню використовуються посилання. Посилання є другим ім'ям змінної (alias). Використовуючи посилання можна передавати параметри без застосування покажчиків, що значно полегшує розуміння коду.
2.6.1.Визначення посилань в SmallTalk, Delphi і Java
В SmallTalk імена всіх змінних є посиланнями на об'єкти. В Delphi посилання можуть використовуватися як для простих, так і для класових типів, а в Java посиланнями є змінні, що вказують на об'єкти. Це відноситься й до спеціальних змінних. Однак у кожному разі посилання реалізуються через покажчики.
2.6.2.Особливості визначення посилань у С++
Загальна форма визначення посилань представляється, як <тип> & <ім'я>
Наприклад:
int y = 3;
int &x = y; // посилання на тип int
y=5; // x також буде рівнятися 5
Особливості визначення:
Посилання повинні бути проініціалізовані при оголошенні.
Посиланнями можуть бути будь-які типи, у тому числі й класові:
class X;
X &x;
Посиланнями можна оперувати, як об'єктами(а не покажчиками):
void increment (int &x)
{x+=1;}
void main ()
{int y = 3;
increment (y);} // y = 3+1 =4
Зміна змінної при передачі її як параметра, відбувається лише в тому випадку, коли тип фактичного й формального параметра збігаються. У противному випадку компілятор створює копію змінної, переданої як фактичний параметр, і надалі буде застосовувати цю копію, а сама змінна при цьому не змінюється:
void main ()
{double z = 4.0;
increment (z); } // z = 4(0; }