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

Методи.

Інкапсульовані в класі процедури і функції називаються методами. Вони оголошуються так само як і звичайні підпрограми:

type

TMyClass = class

Function MyFunc(aPar: Integer): Integer;

Procedure MyProc;

end;

Доступ до методів класу, як і до його полів, можливий за допомогою складених імен:

var

aObject: TMyClass;

begin

aObject.MyProc;

end;

Методи класу можуть перекриватися в нащадках.

Наприклад:

type

TParentClass = class

Procedure DoWork;

end;

TChildClass = class (TParentClass)

Procedure DoWork;

end;

До складу будь-якого класу входять два спеціальні методи - конструктор і деструктор. У класі TObject ці методи називаються Create і Destroy, також вони називаються в переважній більшості його нащадків. Конструктор розподіляє об'єкт в динамічній пам'яті(розміщуються лише поля об'єкту, його методи є загальними для усіх об'єктів цього класу і в купу не переносяться) і поміщає адресу цієї пам'яті в змінну Self, яка автоматично оголошується в класі. Деструктор видаляє об'єкт з купи. Звернення до конструктора повинне упереджати будь-яке звернення до полів і деяких методів об'єкту. По своїй формі конструктори і деструктори є процедурами, але оголошуються за допомогою зарезервованих слів Constructor і Destructor :

type

TMyClass = class

IntField: Integer;

Constructor Create(Value: Integer);

Destructor Destroy;

end;

Властивості.

Властивості - це спеціальний механізм класів, регулюючий доступ до полів. Властивості оголошуються за допомогою зарезервованих слів property, read і write(слова read і write вважаються зарезервованими тільки в контексті оголошення властивості). Зазвичай властивість пов'язана з деяким полем і вказує ті методи класу, які повинні використовуватися при записі в це поле або при читанні з нього.

Наприклад:

type

TaClass = class

IntField: Integer;

Function GetField: Integer;

Procedure SetField(Value: Integer);

Property IntegerValue: Integer-read GetField

write SetField;

end;

У контексті програми властивість поводиться як звичайне поле.

Оголошення класу.

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

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

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

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

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

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

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

Наступний фрагмент коду пояснює різні зони видимості :

Unit Unitl;

Interface

Uses Controls, Forms;

type

TForml = class(TForm)

Buttonl: TButton; // Ця секція обслуговується Delphi Її елементи доступні усім

private // Ця секція доступна в модуле Unitl

FIntField: Integer;

Procedure SetValue(Value: Integer);

Function GetValue: Integer;

published // Ця секція доступна у будь-якому модулі

Property IntField: read GetValue write SetValue; protected //Ця секція доступна класам-нащадкам

Procedure Procl; public // Ця секція доступна у будь-якомумодулі

Procedure Ргос2;

end;

var

Forml: TForml;

Implementation

Procedure TForml.Procl;

Buttonl.Color := clBtnFace; // Так можна FIntField := 0; // Гак можна

IntField := 0; // Так можна

Procl; // Так можна

Ргос2; // Так можна

end;

begin

Forml.Buttonl.Color := clBtnFace; // Гак можна Forml.FIntField := 0; // Так можна

Forml.IntField := 0; // Гак можна

Forml.Procl; // Гак неможна!

Forml.Proc2; // Так можна

end.

Unit Unit2;

Interface

Uses Controls, Unitl;

type

TForm2 = class(TForml) Button2: TButton;

Procedure Button2Click(Sender: TObject); end;

var

Form2: TForm2;

Implementation

Procedure TForm2.Button2Click(Sender: TObject);

begin

Buttonl.Color := clBtnFace; // Так можна FIntField := 0; // Так неможна!

IntField := 0; // Так можна

Procl; , // Так можна

Ргос2; // Так можна

end;

begin

Forml.Buttonl.Color := clBtnFace; // Так можна Forml.FIntField := 0; // Так неможна!

Forml.IntField := 0; // Гак можна

Forml.Procl; // Так неможна!

Forml.Proc2; // Так можна

end.

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