
- •Передмова
- •Розділ 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.7.4.Визначення методів в Delphi
Особливості визначення:
Як методи можуть розглядатися, як функції, так і процедури.
При визначенні функції автоматично визначається локальна змінна Result, яка зберігає значення параметрів, що повертаються:
Function TmyClass.SQR (x: integer): integer;
begin
SQR:=x*x;
{ або
Result:=x;
Result:=Result*x;}
end;
Допускається попереднє оголошення функцій або процедур c вказівкою слова forward:
Procedure Proc1; forward;
У методах можуть використовуватися відкриті масиви, які дозволяють визначити масиви відкритої довжини. Передача масиву як параметра здійснюється шляхом перерахування його об'єктів, взятих у квадратні дужки:
Function CalcMean(x: Array of Real): Real;
begin
{обчислення середнього значення}
end;
………………………………………………
Writeln('Середнє значення = ', CalcMean([1.2,1.5,1.7]));
Саме тіло функції може бути визначене в такий спосіб:
Function CalcMean (x: Array of Real): Real;
Var i: word;
sum: real;
begin
sum:=0;
For i:=0 to High(x) do
sum:=sum+ x[i];
Result:=sum/(High(x)+1);
end;
Тут High(x) – величина типу word, що дорівнює числу елементів масиву мінус 1.
Класові методи можуть бути реалізовані через посилання на клас. Як і в С++ їх можна викликати, використовуючи для цього екземпляри класу, але працювати вони можуть тільки із глобальними змінними. На них поширюється право доступу у своєму класі:
Type TSample= class
ID: integer;
class function GetClassName: string; {одержати ім'я класу}
end;
implementation
class function TSample.GetClassName: string;
begin
Result:='TSample class';
end;
Var anObj: TSample;
s: string;
begin
s:= TSample.GetClassName; {через клас}
anObj:=TSample.Create;
s:= anObj.GetClassName; {через екземпляр класу}
end.
2.7.5.Визначення методів в Java
Особливості визначення:
Всі методи повинні бути визначені усередині оголошення класу. Синтаксис оголошення:
<специфікатор доступу > [static][abstruct][final] <тип значення, що повертається ><ім'я методу >([список параметрів]) {тіло методу}
Повернення значень здійснюється за допомогою функції
return (<повертає значення >)
При поверненні об'єкта повертається тип, що, повинен збігатися або із класом або з одним з його підкласів.
Якщо метод повертає інтерфейс, то повертається об’єкт, що, повинен реалізувати цей інтерфейс.
Допускається перевантаження й заміщення методів. Перевантаження здійснюється так само, як і в С++. Змінна super використовується для виклику заміщеного суперкласу.
Допускається використання абстрактних методів, реалізація яких здійснюється в підкласах даного класу.
Допускається оголошення методів класу як статичних методів. Їх можна викликати, як для класу, так і для його об'єктів, але використовувати усередині методів потрібно тільки статичні змінні.
Примітка: в Java глобальних змінних нема, тому що всі оголошення робляться усередині класу.
Можуть бути визначені final методи, які не можна перевизначати, і abstract методи, що підлягають реалізації в підкласах.
final void meth () {...………………}
abstract void callme(); // тіло методу відсутнє