Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Об1.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
270.85 Кб
Скачать

X.Free;

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

X.Show;

викликає метод Show до об’єкту X. Методи класу описуються в програмі так само як звичайні процедури чи функції, за винятком того, що ім’я процедури чи функції, яка є методом складається з двох частин: імені класу, до якого належить метод та імені методу. Ім’я класу від імені методу відокремлюється крапкою. Наведемо опис методу Show для класу Tstudent:

 

procedure TStudent.Show;

begin

ShowMessage (‘Ім’я’ + fname + ‘ ‘ + ‘Група’ + fgrupe);

end;

Структура класу.

Будь-який створюваний клас може мати секції (розділи), які починаються зарезервованими словами published (декларовані), private (особисті), protected (захищені), public (доступні), automated (автоматизовані). Всередині кожної секції спочатку описуються поля, потім — методи і властивості.

Секції визначають області видимості елементів опису класу.

Секція public не накладає обмежень на область видимості перерахованих в ній полів, методів і властивостей — їх можна викликати в будь-якому іншому модулі програми.

Секція published також не обмежує області видимості, але в ній перераховуються властивості, які повинні бути доступні не тільки на етапі виконання, але і на етапі конструювання програми (тобто у вікні Інспектора Об’єктів). Секція published використовується тільки при розробці нестандартних компонентів. Середовище Delphi само вставляє описи компонентів, поставлених на форму, в спеціальну секцію без назви, яка розміщена відразу після заголовку класу і продовжується до першої об’явленої секції. Це секція — published.Програміст не повинен поміщати в неї власні елементи опису класу чи знищувати елементи, вставлені середовищем.

Секція private звужує область видимості до мінімуму: особисті елементи опису є доступними тільки всередині методів даного класу і в підпрограмах, які знаходяться в тому ж модулі, де описаний клас. Елемент, означений в секції private стає недоступним навіть найближчим нащадкам класу, якщо вони розміщені в інших модулях.

Секція protected доступна лише методам самого класу, а також всім його нащадкам, незалежно від того знаходяться вони в тому самому модулі чи ні.

Секція automated використовується тільки для означення властивостей і методів, які будуть добавлені до інтерфейсу OLE-об’єктів автоматизації; область видимості членів цієї секції не обмежена.

В Object Pascal дозволяється скільки завгодно оголошувати довільну секцію, але порядок розміщення секцій не має значення. Будь-яка секція може бути порожньою.

3. Інкапсуляція

Суть об'єктно-орієнтованого підходу в програмуванні полягає в трьох принципах: інкапсуляції, наслідуванні та поліморфізмі. Для надійної роботи програми, не варто напряму звертатися до полів об'єкту. Натомість, варто звертатися до них через спеціальні методи, які можуть перевірити, наприклад, на допустимість значення в заданому інтервалі або одночасно виконати додаткову роботу по зміні стану об'єкту, залежно від зміни значення поля - це і є інкапсуляція. Іншими словами, під інкапсуляцією розуміють ховання полів об'єкта з метою запезпечення доступу до них лише за допомогою методів класу. Така можливість реалізується в класах через оголошення властивостей об'єкту. Властивість дозволяє обмежити права на зміну значення поля і організовує доступ до поля через методи.

Значення інкапсуляції в об'єктно-орієнтованому програмуванні важко переоцінити. Наприклад, в Delphi майже всі поля класів доступні через властивості.

В Object Pascal обмежений доступ до полів об’єкту здійснюється через властивості об’єкта. Властивість об’єкту характеризується полем, в якому зберігаються значення об’єкту та двома методами, які забезпечують доступ до поля властивості. Метод встановлення значення властивості наз. методом запису властивості (write), метод отримання значення властивості — методом читання властивості (read).В описі класу перед іменем властивості записують слово property (властивість). Після імені властивості вказується її тип, а потім імена методів, які забезпечують доступ до значення властивості. Після слова read вказується ім’я методу, який забезпечує читання властивості, після слова write вказується ім’я методу, який забезпечує запис властивості. Наведемо приклад опису класу Tstudent, який має дві властивості Sname, Group:

type

TSname: string[15];

TGroup: string[10];

TStudent = class

private

FSname: TSname; //значення властивості Sname;

FGroup: TGroup; //значення властивості Group;

Constructor Create (Sname: TSname);

Procedure Show;

Function GetSname: Tsname;

Function GetGroup: TGroup;

Procedure SetGroup (NewGroup : TGroup);

public

Property Sname : TSname; //властивість Sname;

read GetSname; //доступна тільки для читання;

Property Group : TGroup; //властивість Group;

read GetGroup; //доступна тільки для читання;

write SetGroup; //і запису

end.

В програмі для встановлення значення властивості не потрібно записувати інструкцію застосування до об’єкту методу встановлення значення властивості, а потрібно записати звичайний оператор присвоювання. Наприклад, щоб присвоїти значення властивості Sname об’єкту X потрібно записати:

X. Sname := ‘Ivanov Tolic’;

Компілятор перетранслює приведену команду присвоювання у команду виклику методу.

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

В програмі на методи властивості можна накласти деякі додаткові задачі. Наприклад, за допомогою методу можна перевірити коректність присвоюваних йому значень, встановити значення інших полів, які пов’язані із властивістю; викликати допоміжну процедуру.

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