Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OЗП в delphi.docx
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
106 Кб
Скачать
☆

12.2.Опис класів і об’єктів

Класи описуються у розділі Type глобального блоку. Опис класу розпочинається ключовим словом class і закінчується словом end. По формі клас подібний до запису, але тут крім полів даних містяться властивості та заголовки процедур і функцій, які використовуються для обробки цих даних. Такі процедури і функції називаються методами. Наприклад,

Type //Вимірювач дискового простору

TDiskGauge=class

DriveLetter:char; {Буква дисководу}

{Критичний процент вільного простору}

PercentCritical:integer;

{Повертає об’єм вільного простору на диску}

Function GetPercentFree:integer;

{Перевіряє стан ресурсу і видає звукове

повідомлення}

Procedure CheckStatus;

end;

Програмний код методів поміщається за межами класу. Клас описує сутність, яка моделюється у програмі. Так клас TDiskGauge описує вимірювач дискового простору. Цей клас містить два поля це буква дисководу і поріг дискового простору, якщо об’єм диску опускається до критичного значення, то користувачу видається звукове повідомлення. Визначені у класі методи будуть працювати з будь-яким об’єктом класу TDiskGauge.

Щоб перейти від опису класу до об’єкту слід його описати у розділі Var

Var DiskGauge: TDiskGauge;

Об’єкт у Object Pascal є динамічним, тому змінна DiskGauge є вказівником на конкретний екземпляр об’єкту, який ще фізично не існує. Для того щоб створити об’єкт у пам’яті і зв’язати з ним змінну DiskGauge у програмі слід виконати оператор

DiskGauge=TDiskGauge.Create;

Create - конструктор об’єкту, він завжди присутній у класі і служить для створення та ініціалізації об’єкту. При цьому виділяється пам’ять для полів, а методи як і звичайні процедури та функції поміщаються в область коду програми, вони працюють з усіма об’єктами свого класу і у пам’яті не дублюються. Після створення об’єкт можна використовувати у програмі - читати і встановлювати поля, викликати методи. Доступ до полів і методів здійснюється за допомогою складених імен

DiskGauge.DriveLetter:=’c’;

DiskGauge.PercentCritical:=10;

DiskGauge.CheckStatus;

або використовувати оператор приєднання with

with DiskGauge do

begin

DriveLetter:=’c’;

PercentCritical:=10;

CheckStatus;

end;

Якщо об’єкт стає не потрібним у програм, то його можна вилучити викликом спеціального методу

DiskGauge.Destroy;

Destroy – деструктор об’єкту, він присутній у класі разом із конструктором і служить для вилучення об’єкту із динамічної пам’яті. Після виклику деструктора змінна DiskGauge стає незв’язаною і не може використовуватися для доступу до полів і методів уже неіснуючого об’єкту. Для того щоб відрізняти зв’язані і незв’язані змінні, незв’язані змінні ініціалізуються значеням NIL.

Виклик деструктора для неіснуючого об’єкта недопустимий і приводить до помилки. Тому у об’єкти введено метод який аналізує стан об’єкту і викликає при необхідності деструктор Destroy

DiskGauge.Free;

Значення однієї об’єктної змінної можна присвоювати іншій, при цьому об’єкт не копіюється, а вказує на той же об’єкт. Наприклад,

var D1,D2: TDiskGauge;

begin

{Створюється об’єкт і змінна D1 зв’язана з ним}

D1: TDiskGauge.Create;

D2:=D1; {Змінні D1 і D2 зв’язані з одним об’єктом}

. . . . . . . .

{Об’єкт вилучено і змінні D1, D2 не зв’язані з ним}

D2.Free;

end;

Об’єкти можуть виступати у програмі не тільки в якості змінних, але й елементів масивів, полів записів, параметрів процедур і функцій.

У деяких випадках необхідно щоб об’єкти різних класів посилалися один на одного. Тоді ця проблема вирішується за допомогою попереднього опису. Наприклад,

Type

TaClass=class; {Попередній опис класу}

TbClass=class

W:TaClass

. . . . .

end;

TaClass=class

G:array[1..5] of TbClass;

. . . . .

end;

Попередній опис класу TaClass необхідний для того, щоб компілятор сприйняв опис W у класі TbClass.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]