Чтение онлайн

ЖАНРЫ

Технологии программирования
Шрифт:

{ Public declarations }

end;

type

TSomeType = String;

type

TAnObject = class(TObject)

private

FValue: TSomeType;

function GetAProperty: TSomeType;

procedure SetAProperty (ANewValue: TSomeType);

public

property AProperty: TSomeType

read GetAProperty

write SetAProperty;

end;

var

Form1: TForm1;

AnObject: TAnObject;

implementation

{$R *.DFM}

procedure TForm1.ButtonlClick(Sender: TObject);

begin

AnObject:= TAnObject.Create;

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

Label1.Caption:= AnObject.AProperty;

end;

procedure TAnObject.SetAProperty(

ANewValue: TSomeType);

begin

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

end;

function TAnObject.GetAProperty: TSomeType;

begin

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

end;

end.

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

program PrTestir;

uses

Forms,

testir in 'testir.pas' {Form1};

{$R *.RES}

begin

Application.Initialize;

Application.CreateForm(TForm1, Form1);

Application.Run;

end.

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

В набранном примере текст модуля содержит сгенерированный текст объявления объектного типа Tform1. В типе содержатся указания на агрегацию в данном классе объекта кнопки Button1: Tbutton и объекта Label1: Tlabel.

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

procedure Button1Click(Sender: TObject).

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

var

Form1: TForm1;

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

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

type

TAnObject = class(TObject) private

FValue: TSomeType;

function GetAProperty: TSomeType;

procedure SetAProperty (ANewValue: TSomeType);

public

property AProperty: TSomeType

read GetAProperty

write SetAProperty;

end;

var

AnObject: TanObject.

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

private

FValue: TSomeType;

function GetAProperty: TSomeType;

procedure SetAProperty (ANewValue: TSomeType);

public

property AProperty: TSomeType

read GetAProperty

write SetAProperty;

procedure TAnObject.SetAProperty(ANewValue: TSomeType);

begin

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

end;

function TAnObject.GetAProperty: TSomeType;

begin

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

end;

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

Поделиться с друзьями: