Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

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.





Дата публикования: 2014-11-02; Прочитано: 433 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.013 с)...