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 по двойному щелчку мыши по кнопке
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), достаточно написать:
AnObject.AProperty:=…;
…:= AnObject.Aproperty;
и компилятор оттранслирует эти операторы в вызовы методов.
Рассмотрим три оператора, вписанные в текст "пустой" процедуры (метод) Button1Click:
AnObject:= TAnObject.Create;
AnObject.AProperty:= 'Привет!';
Label1.Caption:= AnObject.AProperty;
Первый оператор создает экземпляр объекта. Второй оператор в недоступное по интерфейсу (protected) поле Fvalue засылает при помощи недоступной по интерфейсу (protected) процедуры AnObject.SetAProperty текст "Привет!". Третий оператор при помощи недоступной по интерфейсу (protected) процедуры АпОЬject.GetAProperty считывает данные из недоступного по интерфейсу поля Fvalue и засылает их в свойство Caption объекта надписи Label1.
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии