
- •Передмова
- •Розділ 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.10.Властивості
2.10.1.Властивості в Delphi
Властивості (properties) деяким чином поєднують поняття полів даних і методів. Більш точно, це поля даних з жорстко прив'язаними до них методами доступу. Дані методи ніколи не викликаються безпосередньо для об'єкта. Вони викликаються побічно, через використання імені поля. Таким чином, властивості реалізують основне правило об'єктного програмування: працювати з даними тільки через методи класу.
Особливості оголошення й визначення властивостей:
Синтаксис оголошення властивості:
Property <ім'я властивості > : <тип властивості > read <метод для читання > write <метод для запису >;
Як правило, властивості оголошуються в розділі public або published, а ім'я властивості починається з великої літери.
Методи читання й записи повинні оголошуватися в розділі private у тім же класі, що й властивості, а їхнє визначення робиться в розділі implementation, як звичайних методів. Методи властивості не можуть бути заміщені.
Методи читання мають префікс Get, а запису Set.
Метод читання - це обов'язкова функція, що має тип значення, що повертає, співпадаюче з типом властивості.
Метод запису - це обов'язкова процедура, що має один параметр, тип якого збігається з типом властивості.
Використання властивостей здійснюється за наступною схемою:
Property Number: Integer
read GetNumber
write SetNumber;
……………………………
function GetNumber: Integer;
……………………………
procedure SetColor(Value: Number);
……………………………
x := number;{буде викликаний метод читання властивості number,}
{а повертає значення,, що, буде привласнено змінної х,}
{яка має такий же тип що й властивість number}
number := y; {буде викликаний метод запису, у який}
{як параметр буде переданий y}
{і властивості number буде привласнене значення y}
Для зберігання значення властивостей використовуються спеціальні поля даних, імена яких будуються в такий спосіб: F<ім'я властивості >. Наприклад, для властивості Number існує внутрішнє сховище даних, що називається FNumber. Дані поля створюються автоматично, але при необхідності їх можна оголосити і явно, як це зроблено в наступному прикладі, що показує використання властивостей при визначенні класу «Книжкова полиця» (BookCase):
Type TBookCase = class
private
FWidth: integer; {явні}
FDepth: integer; {поля, але це не обов'язково}
Function GetWidth: integer;
Procedure SetWidth (value : integer);
Function GetDepth: integer;
Procedure SetDepth (value : integer);
Function GetSpace: integer;
public
Property Width: integer read GetWidth write SetWidth;
Property Depth: integer read GetDepth write SetDepth;
Property Space: integer read GetSpace;
end;
implementation
function TBookCase.GetWidth: integer;
begin
Result:= FWidth;
end;
procedure TBookCase.SetWidth (value: integer);
begin
FWidth:=value;
end;
function TBookCase.GetDepth: integer;
begin
Result:= FDepth;
end;
procedure TBookCase.SetDepth (value: integer);
begin
FDepth:=value;
end;
function TBookCase.GetSpace: integer;
begin
Result:= FWidth*FDepth;
end;
var BookCase: TBookCase;
begin
BookCase:= TBookCase.Create;
with BookCase do
begin
Width:=30; Depth:=10;
Writeln('Простір дорівнює = ', Space);
end;
end.
Обмеження, пов'язані з використанням властивостей, полягають у наступному:
Властивості, що оголошені в розділі public, не можна перевизначати в підкласах у розділах private і protected.
Властивості не можна передавати як параметри функції, якщо вони використовуються як значення, що повертається.
У методі доступу по запису варто уникати рекурсій. Наприклад, не можна визначити метод write у такий спосіб:
procedure TBookсase.SetDepth (value: integer);
begin
If value > FDepth then Depth:=value;
end;