русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Властивості


Дата додавання: 2014-04-22; переглядів: 921.


Виходячи з принципу інкапсуляції, поля даних завжди мають бути захищеними від несанкціонованого доступу. Доступ до них, як правило, повинен здійснюватися через властивості, що включають методи читання і запису полів. Тому поля доцільно оголошувати в розділі private – закритому розділі класу. Зрідка їх можна поміщати в protected -захищеному розділі класу, щоб можливі потомки даного класу мали до них доступ. Традиційно ідентифікатори полів співпадають з іменами відповідних властивостей, але з додаванням у якості префікса символа 'F'.

property <ім’я>:<тип> read <ім’я поля чи методу читання> write <ім’я поля чи методу запису> <директиви запам’ятовування>

Якщо в розділах read чи write записане ім’я поля, то передбачається пряме читання чи запис даних.

Якщо в розділі read записане ім’я методу читання, то читання буде здійснюватися лише функцією з цим іменем. Функція читання – це функція без параметру, що повертає значення того типу, який оголошений для властивості. Ім’я функції читання прийнято починати з префіксу Get, після якого йде ім’я властивості.

Якщо в розділі write записане ім’я методу запису, то запис буде здійснюватися лише процедурою з цим іменем. Процедура запису – це процедура з одним параметром того типу, який оголошений для властивості. Ім’я процедури запису прийнято починати з префіксу Set, після якого йде ім’я властивості.

Якщо розділ writeвідсутній в оголошенні властивості, значить це властивість лише для читання і користувач не може задавати його значення.

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

default <значення по замовчуванню>

Вона не задає початкових умов, це завдання конструктора. Директива просто оголошує, що якщо користувач в процесі проектування не поміняв значення властивості за замовчуванням, то зберігати значення властивості не потрібно.

Приведемо приклад. Нехай потрібно оголосити клас з іменем MyClass, що є безпосереднім спадкоємцем TObject і має властивість цілого типу з іменем А. Тоді оголошення цього класу може мати вигляд:

type

MyClass=class(TObject)

private

FA: integer;

protected

procedure SetA(Value:integer); //процедура запису

published

property A: integer read FA write SetA default true;

end;

 

Тут вводиться закрите поле FA, оголошується захищена функція SetA, що використовується для запису значення цього поля, і вводиться опублікована властивість А, яка оперує цим полем. В оголошенні властивості після ключового слова read записане просто ім’я поля. Це означає, що функція читання відсутня і користувач може безпосередньо читати знаення поля. Після ключового слова writeйде посилання на функцію запису SetA, за допомогою якої в поле А будуть записуватися нові значення. В цій функції можна передбачити якісь перевірки допустимості введеного значення А.

Опис цієї функції повинен поміщатися в розділ implementation модуля, в якому оголошений клас, і може мати вигляд

procedure MyClass.SetA(Value:integer);

begin

if…

then FA:=Value;

end;

В приведеному прикладі опис властивості А поміщений в розділ published. Отже, якщо цей клас описує створений нами новий компонент, то після його встановлення в системі властивість А з’явиться у вінкі Інспекторі Об’єктів при використанні цього компонента. Якщо перенести оголошення властивості в розділ public, то властивістю можна буде користуватися лише під час виконання програми, бо у вікні Інспектора Об’єктів воно не з’явиться. Якщо видалити з означення властивості слово writeз наступним посиланням на функцію запису, то властивість стане властивістю тільки для читання, оскільки поміняти її безпосередньо буде неможливо

 


<== попередня лекція | наступна лекція ==>
Оголошення класу | Методи та їх успадковування, поліморфізм


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн