Головна

Property-властивості

Властивості Property аналогічні властивостям об'єкта в сенсі їх використання. Однак внутрішній механізм їх роботи набагато складніший.

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

Отже, опис властивостей Property в найпростішому вигляді виглядає наступним чином:

Property <Ім'я властивості>: <Тип>

Read <Функція читання значення>

Write <Процедура установки значення>;

Коли викликає підпрограма звертається до властивості Property для отримання його значення, замість конкретного значення повертається результат функції, зазначеної в назві після модифікатора Read. Аналогічно проводиться установка значення властивості - замість прямого запису значення викликається процедура, зазначена після модифікатора Write. Відповідно, дана процедура повинна приймати один параметр, причому його тип повинен бути таким же, як тип самого властивості.

Модифікатори Read і Write можуть не бути присутнім в описі property-властивості одночасно. Якщо для властивості задана функція читання, але не задана процедура запису, то така властивість може бути використано тільки для отримання значення. Якщо задана процедура установки значення, але не задана функція читання, то property-властивість можна використовувати тільки в лівій частині оператора присвоювання. У розглянутому нами прикладі властивості а й b повинні бути доступні викликає фрагменту і для читання і для запису, тоді як властивість з може бути доступно тільки для читання.

Приклад опису та використання property-властивості для підтримки коректності даних приведений в лістингу 3.8.

Лістинг 3.8. Приклад опису та використання property-властивості

Unit Properties; (Тема модуля}

Interface

Type

ABC4 = class

private

fa, fb, fc: Double {Всі властивості мають вузьку область видимості}

protected {Всі методи мають область видимості protected}

Procedure SetA (NewA: Double) {Процедура установки значення

властивості fa}

Procedure SetB (NewB: Double);

{Процедура установки значення властивості fb}

Function GetA: Double; {Функція отримання значення властивості fa}

Function GetB: Double; {Функція отримання значення властивості fb}

Function GetC: Double; {Функція отримання значення властивості fc}

{Розділ опису property-властивостей, доступних published

зухвалому фрагменту програми}

property A: Double read GetA write SetA;

{Опис property-властивості А, для якого задана функція

читання GetA і процедура установки SetA. властивість буде

доступно викликає фрагменту програми для читання

і записи}

property В: Double read GetB write SetB;

{Опис property-властивості В, для якого задана функція

читання GetB і процедура установки SetB. властивість буде

доступно викликає фрагменту програми для читання

і записи}

property З: Double read GetC;

{Опис property-властивості В, для якого задана функція

читання GetC, але не задана процедура установки. властивість

буде доступно викликає фрагменту програми

тільки для читання}

end;

Implementation

Procedure ABC4.SetA (NewA: Double); {Опис методу SetA}

Begin

fa: = NewA; {Занесення нового значення в private-властивість fa}

fc: = fa * fb; {Перерахунок твори і занесення результату в

властивість fc}

end;

Procedure ABC4.SetB (NewB: Double); {Опис методу SetB}

Begin

fb: = NewB; {Занесення нового значення в private-властивість fb}

fc: = fa * fb; {Перерахунок твори і занесення результату в

властивість fc}

end;

Function ABC4.GetA: Double; {Опис методу GetA}

Begin

Result: = fa; {Результат функції - значення private-властивості fa}

end;

Function ABC4.GetB: Double; {Опис методу GetB}

Begin

Result: = fb; (Результат функції - значення private-властивості fb}

end;

Function ABC4.GetC: Double; {Опис методу GetC}

Begin

Result: = fc; {Результат функції - значення private-властивості fc}

end;

end. {Закінчення модуля}

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

Зауважимо, що замість функції читання і процедури установки може бути зазначено одне зі звичайних властивостей, незалежно від його області видимості. У розглянутому прикладі таку можливість слід застосувати при описі property-властивостей а, b і с, вказавши замість функцій читання властивості fa, fb і fc, відповідно. Модифікований текст модуля наведений у лістингу 3.9.

Лістинг 3.9. Приклад опису та використання property-властивості (модифікований)

Unit Properties; {Заголовок модуля}

Interface

Туре

АВС4 = class

private

fa, fb, fc: Double; {Всі властивості мають вузьку область видимості}

protected {Всі методи мають область видимості protected}

Procedure SetA (NewA: Double);

{Процедура установки значення властивості fa}

Procedure SetB (NewB: Double);

{Процедура установки значення властивості fb}

published {Розділ опису property-властивостей, доступних

зухвалому фрагменту програми}

property A: Double read fa write SetA;

{Для установки значення property-властивості використовується

метод SetA, а для читання private-властивість fa}

property В: Double read fb write SetB;

{Для установки значення property-властивості використовується

метод SetB, а для читання private-властивість fb}

property З: Double read fc;

(Для читання property-властивості використовується значення private-

властивості fc}

end;

Implementation

Procedure ABC4.SetA (NewA: Double); {Опис методу SetA}

Begin

fa: = NewA;

fc: = fa * fb;

end;

Procedure ABC4.SetB (NewB: Double); {Опис методу SetB}

Begin

fb: = NewB;

fc: = fa * fb;

end;

end. {Закінчення модуля}

Такий підхід також не дає можливості порушити цілісність даних викликає фрагментом, так як не забезпечується прямий доступ до установки значень властивостей fa, fb і fc.




 Види підпрограм. Процедури і функції |  Передача параметрів за значенням |  Передача параметрів за посиланням. Параметри-змінні |  Опишіть структуру вихідних текстів програми на мові Object Pascal в Delphi |  Наведіть приклад опису змінних |  Розкажіть про масивах в Object Pascal |  Назвіть структурні оператори, що застосовуються в Object Pascal, і їх особливості |  Розкажіть про різні механізми передачі параметрів в підпрограми Delphi |  Опис класу. Властивості і методи |  методи класу |

© um.co.ua - учбові матеріали та реферати