Литмир - Электронная Библиотека
Содержание  
A
A

<b>function </b>GetAProperty: TSomeType;

<b>procedure </b>SetAProperty (ANewValue: TSomeType);

<b>public</b>

<b>property </b>AProperty: TSomeType

<b>read </b>GetAProperty

<b>write </b>SetAProperty;

<b>end;</b>

<b>var</b>

Form1: TForm1;

AnObject: TAnObject;

<b>implementation</b>

{$R *.DFM}

<b>procedure </b>TForm1.ButtonlClick(Sender: TObject);

<b>begin</b>

AnObject:= TAnObject.Create;

AnObject.AProperty:= 'Привет!';

Label1.Caption:= AnObject.AProperty;

<b>end;</b>

<b>procedure </b>TAnObject.SetAProperty(

ANewValue: TSomeType);

<b>begin</b>

FValue:= ANewValue; {Засылка значения в поле}

<b>end;</b>

<b>function </b>TAnObject.GetAProperty: TSomeType;

<b>begin</b>

GetAProperty:= FValue; {Чтение значения из поля}

<b>end;</b>

<b>end.</b>

Сохраним проект (Save Project As). При сохранении проекта укажем новое имя модуля — testir и новое имя проекта — PrTestir. Рассмотрим текст получившегося файла проекта (пункты меню View и далее Project Source):

<b>program </b>PrTestir;

<b>uses</b>

Forms,

testir in 'testir.pas' {Form1};

{$R *.RES}

<b>begin</b>

Application.Initialize;

Application.CreateForm(TForm1, Form1);

Application.Run;

<b>end.</b>

Данный файл содержит текст основной программы PrTestir. К основной программе подключаются модуль Forms (для работы с формой) и исходный код модуля testir. Три исполняемых оператора основной программы последовательно организуют новый вычислительный процесс выполнения написанной программы PrTestir, создадут объект формы Form1, осуществят запуск программы на выполнение (Run).

В набранном примере текст модуля содержит сгенерированный текст объявления объектного типа Tform1. В типе содержатся указания на агрегацию в данном классе объекта кнопки Button1: Tbutton и объекта Label1: Tlabel. Благодаря агрегации экземпляры объектов кнопки и надписи будут создаваться одновременно с созданием экземпляра объекта формы, в результате чего как бы получится совместно работающий с кнопкой и надписью объект формы. В типе Tform1 Delphi по двойному щелчку мыши по кнопке <Button1> сгенерировала прототип вызова метода:

<b>procedure </b>Button1Click(Sender: TObject).

Также Delphi автоматически сгенерировала переменную объектного типа

var

Form1: TForm1;

и в секции реализации вставила текст "пустой" процедуры Button1Click отработки действий по нажатию кнопки Button1.

Рассмотрим элементы, добавленные нами в текст модуля по реализации инкапсуляции. Итак, нами был набран текст описания класса TAnObject и переменная данного объектного типа AnObject:

<b>type</b>

TAnObject = class(TObject) <b>private</b>

FValue: TSomeType;

<b>function </b>GetAProperty: TSomeType;

<b>procedure </b>SetAProperty (ANewValue: TSomeType);

<b>public</b>

<b>property </b>AProperty: TSomeType

<b>read </b>GetAProperty

<b>write </b>SetAProperty;

<b>end;</b>

<b>var</b>

AnObject: TanObject.

Обычно свойство (property) определяется тремя своими элементами: полем и двумя методами, которые осуществляют его запись/чтение:

<b>private</b>

FValue: TSomeType;

<b>function </b>GetAProperty: TSomeType;

<b>procedure </b>SetAProperty (ANewValue: TSomeType);

<b>public</b>

<b>property </b>AProperty: TSomeType

<b>read </b>GetAProperty

<b>write </b>SetAProperty;

<b>procedure </b>TAnObject.SetAProperty(ANewValue: TSomeType);

<b>begin</b>

FValue:= ANewValue; {Засылка значения в поле}

<b>end;</b>

<b>function </b>TAnObject.GetAProperty: TSomeType;

<b>begin</b>

GetAProperty:= FValue; {Чтение значения из поля}

<b>end;</b>

В данном примере свойство Aproperty выполняет такую же функцию, какую в предшествующем примере выполняло поле MyField. Доступ к значению свойства Aproperty осуществляется через вызовы методов GetAProperty и SetAProperty. Однако в обращении к этим методам в явном виде нет необходимости (в рассматриваемом примере они даже защищены — protected), достаточно написать:

AnObject.AProperty:=…;

…:= AnObject.Aproperty;

и компилятор оттранслирует эти операторы в вызовы методов.

Рассмотрим три оператора, вписанные в текст "пустой" процедуры (метод) Button1Click:

107
{"b":"943277","o":1}