В Object Pascal ограничение доступа к полям объекта реализуется при помощи свойств объекта. Свойство объекта характеризуется полем, хранящем значением свойства, и двумя методами, обеспечивающими доступ к полю свойства. Метод установки значения свойства называется методом записи свойства (write), метод получения значения свойства называется методом чтения свойства (read).
В описании класса перед именем свойства записывают слово property (свойство). После имени свойства указывается его тип, затем имена методов, обеспечивающих доступ к значению свойства. После слова read указывается имя метода, обеспечивающего чтение свойства, после слова write – имя метода записи свойства. Следующий пример содержит описание класса с двумя свойствами – Name и Oklad.
Tperson=class
private
fname:string;
foklad:integer;
Constructor Create(name:string; oklad: integer);
Procedure show;
Function GetName : string;
Function GetOklad : integer;
Procedure SetOklad (NewOklad:integer);
public
Property Name:string
read GetName;
Property Oklad: integer
read GetOklad
write SetOklad;
end;
В программе для задания свойства не обязательно записывать инструкцию применения к объекту метода установки значения свойства, можно записать обычную инструкцию присваивания значения свойству. Например, чтобы присвоить значение свойству Oklad объекта sotrudnik достаточно написать
sotrudnik.Oklad:=300;
Компилятор перетранслирует приведенную инструкцию в инструкцию вызова метода
sotrudnik.SetOklad(300);
Внешне использование свойств в программе ничем не отличается от использования полей объекта. Вместе с тем между свойством и полем объекта существует принципиальное отличие: при присвоении и чтении значения свойства автоматически вызывается процедура, которая выполняет некоторые действия.
В программе на методы свойства можно возложить некоторые дополнительные задачи. Например, с помощью метода можно проверить корректность присваиваемых свойству значений, установить значения других, логически связанных со свойством, полей, вызвать вспомогательную процедуру.
Оформление данных объекта как свойства позволяет ограничить доступ к полям, хранящим значения свойств объекта, например, можно разрешить только чтение. Чтобы инструкции программы не могли изменить значение свойства, нужно указать только имя метода чтения. Попытка присвоить значения свойству, предназначенному только для чтения, вызовет ошибку при компиляции. В приведенном выше описании класса свойство Name доступно только для чтения, а свойство Oklad - для чтения и записи.
Установить значение свойства, защищенного от записи, можно во время инициализации объекта.