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

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

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

Властивості (properties) деяким чином поєднують поняття полів даних і методів. Більш точно, це поля даних з жорстко прив'язаними до них методами доступу. Дані методи ніколи не викликаються безпосередньо для об'єкта. Вони викликаються побічно, через використання імені поля. Таким чином, властивості реалізують основне правило об'єктного програмування: працювати з даними тільки через методи класу.

Особливості оголошення й визначення властивостей:

  1. Синтаксис оголошення властивості:

Property <ім'я властивості > : <тип властивості > read <метод для читання > write <метод для запису >;

  1. Як правило, властивості оголошуються в розділі public або published, а ім'я властивості починається з великої літери.

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

  3. Методи читання мають префікс Get, а запису Set.

  4. Метод читання - це обов'язкова функція, що має тип значення, що повертає, співпадаюче з типом властивості.

  5. Метод запису - це обов'язкова процедура, що має один параметр, тип якого збігається з типом властивості.

Використання властивостей здійснюється за наступною схемою:

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.

Обмеження, пов'язані з використанням властивостей, полягають у наступному:

  1. Властивості, що оголошені в розділі public, не можна перевизначати в підкласах у розділах private і protected.

  2. Властивості не можна передавати як параметри функції, якщо вони використовуються як значення, що повертається.

  3. У методі доступу по запису варто уникати рекурсій. Наприклад, не можна визначити метод write у такий спосіб:

procedure TBookсase.SetDepth (value: integer);

begin

If value > FDepth then Depth:=value;

end;

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