<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: