пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

Объектно-ориентированный подход в программировании. Свойства объектов, их отличие от полей, ограничение на запись и чтение. Инкапсуляция. Показать реализацию принципа на примере.

Объектно-ориентированное программирование (ООП) - это методика разработки программ, в основе которой лежит понятие объекта, как некоторой структуры, описывающей объект реального мира, его поведение.

Свойства объектов. Инкапсуляция.

Классическое правило объектно-ориентированного программирования утверждает, что для обеспечения надежности нежелателен прямой доступ к полям объекта: чтение и обновление их содержимого должно производиться посредством вызова соответствующих методов. Это правило называется инкапсуляцией. В языке Object Pascal принцип нкапсуляции реализуется посредством свойств - виртуальных характеристик объектов, базирующихся на значениях конкретных полей.

Поля объекта хранят данные (т.е. занимают место в памяти), а свойства посредством вызова соответствующих методов позволяют определять и узнавать различные характеристики объектов, которые, в общем случае, могут и не храниться в памяти, а, например, вычисляться по формулам.

Обычно свойство определяется полем соответствующего типа и двумя методами доступа – для чтения значения поля (функция) и изменения значения (процедура):

type

 TMyClass = class

 fValue : TSomeType;

function GetValue: TSomeType;

 procedure SetValue(NewValue: TSomeType);

 property pValue: TSomeType read GetValue write SetValue;

 end;

В этом примере

fValue – поле для хранения значения свойства,

GetValue – метод для чтения значения свойства,

SetValue – метод для изменения значения свойства,

pValue – само свойство,

TSomeType – тип данного свойства.

В тексте программы использование свойства не отличается от использования обычного поля, но при компиляции вызов свойства для чтения или для записи заменяется вызовом соответствующих методов, например (var MyObject : TMyClass) :

исходный текст

интерпретируется как

MyObject.pValue:=AValue;

MyObject.SetValue(AValue);

AVariable:= MyObject.pValue;

AVariable:= MyObject.GetValue;

В рамках методов Get и Set прописываются дополнительные операции, которые необходимо выполнить для реализации чтения или изменения свойства. Например, при изменении ширины формы надо не просто занести в соответствующую ячейку новое значение, но и выполнить операции по перерисовке на мониторе как самой формы, так и окружающей ее области.

Если же дополнительные операции не требуются, то при описании свойства ссылку на метод можно заменить ссылкой на поле. Рассмотрим следующее описание:

type

 TMyClass = class

 fValue : TSomeType;

 procedure SetValue(NewValue: TSomeType);

 property pValue: TSomeType read fValue write SetValue;

 function Correct(Value: TSomeType):boolean;

 procedure DoSomeThing;

 end;

 ...

procedure TmyClass.SetValue(NewValue: TSomeType);

begin

 if Correct(NewValue) then fValue:=NewValue;

 DoSomeThing;

end;

Здесь чтение свойства pValue означает просто чтение поля fValue. Зато при присвоении

ему значения внутри SetValue будут вызваны сразу два метода.

Если свойство только читается или записывается, то в его описании присутствует только

один, соответствующий, метод:

property pValue: TSomeType read GetValue;

В этом примере попытка изменить значение свойства pValue вызовет ошибку компиляции


25.03.2015; 19:10
хиты: 129
рейтинг:0
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь