- •Вопрос 1 Классы Понятие класса
- •Классы в программных модулях
- •Объекты
- •Вопрос 2 Концепции
- •Вопрос3 Методы Понятие метода
- •Вопрос 4 . Конструкторы и деструкторы
- •Вопрос 5 Свойства Понятие свойства
- •Методы получения и установки значений свойств
- •Свойства-массивы
- •Свойство-массив как основное свойство объекта
- •Вопрос 6 Наследование Понятие наследования
- •Прародитель всех классов
- •Перекрытие атрибутов в наследниках
- •Совместимость объектов различных классов
Вопрос 5 Свойства Понятие свойства
Помимо полей и методов в объектах существуют свойства.
1. При работе с объектом свойства выглядят как поля: они принимают значения и участвуют в выражениях. Но в отличие от полей свойства не занимают места в памяти, а операции их чтения и записи ассоциируются с обычными полями или методами. Это позволяет создавать необходимые сопутствующие эффекты при обращении к свойствам. Создание сопутствующего эффекта достигается тем, что за присваиванием свойству значения стоит вызов метода.
2. Объявление свойства выполняется с помощью зарезервированного слова property:
property propertyName[indexes]: type index integerConstant specifiers; |
Где:
propertyName – любой корректный идентификатор;
type – предопределенный или декларированный раньше тип;
specifiers – спецификаторы доступа;
[indexes] – необязательный параметр, который позволяет описать индексированное свойство (свойство-массив);
index integerConstant – необязательная секция, содержащая ключевое слово index и некоторую константу типа Integer (передается автоматически как параметр для методов, указанных в спецификаторах доступа), используется для методов, обслуживающих несколько свойств.
Простейший пример:
Type Tfigure = class private Fcolor:TColor; ... Protected
//Метод записи (установки значения)свойства Procedure setColor(c:TColor); virtual;
Property Color: TColor read Fcolor write setcolor; // Свойство end; |
3. При объявлении свойства используются ключевые слова: read, write, stored, default (nodefault) и implements, которые называются спецификаторами доступа. Каждое свойство должно обязательно содержать хотя бы один из спецификаторов: read, write.
read – указывается поле или метод, к которому происходит обращение при чтении (получении) значения свойства. Например, чтение свойства Color означает чтение поля Fcolor.
write — поле или метод, к которому происходит обращение при записи (установке) значения свойства. Например, установка свойства — вызов метода SetColor.
stored –
4. Чтобы имена свойств не совпадали с именами полей, последние принято писать с буквы F (от англ. field).
5. Обращение к свойствам выглядит в программе как обращение к полям:
var Fugure: TFigure; ... Figure.Color := red; // Эквивалентно Figure.SetColor(red); If Figure.Color = red then // Эквивалентно Figure.Fcolor; ShowMessage(‘Красный’); |
6. Если один из спецификаторов доступа опущен, то значение свойства можно либо только читать (задан спецификатор read), либо только записывать (задан спецификатор write). В следующем примере объявлено свойство, значение которого можно только читать.
7. В отличие от полей свойства не имеют адреса в памяти, поэтому к ним запрещено применять операцию @. Как следствие, их нельзя передавать в var- и out-параметрах процедур и функций.
8. Технология объектно-ориентированного программирования в среде Delphi предписывает избегать прямого обращения к полям, создавая вместо этого соответствующие свойства. Это упорядочивает работу с объектами, изолируя их данные от непосредственной модификации. В будущем внутренняя структура класса, которая иногда является достаточно сложной, может быть изменена с целью повышения эффективности работы программы. При этом потребуется переработать только методы чтения и записи значений свойств; внешний интерфейс класса не изменится.