На этом шаге мы приведем общие сведения о свойствах.
Как известно объектно-ориентированная методология (ОО-методология) базируется на "трех китах" - понятиях инкапсуляции, наследования и полиморфизма.
Понятие инкапсуляции и хороший стиль объектно-ориентированного программирования требуют, чтобы обращение к полям объектов выполнялось исключительно посредством методов. Однако призывы соблюдать хороший стиль программирования еще со времен основоположников структурного программирования Дейкстры, Хоара, Дала, Вирта зачастую так и остаются только призывами, если они не подкрепляются соответствующими синтаксическими конструкциями языков программирования. Так было с понятием модуля и модульного программирования. То же самое наблюдается и при применении ОО-методологии, когда поля объектов используют как поля обычных записей, забывая о необходимости инкапсуляции. Проблема написания хороших модулей (в смысле логических единиц программы) была решена с разработкой синтаксической конструкции "модуль", поддерживающей принцип скрытия информации Парнаса. Проблема написания хороших классов в Borland Pascal была частично решена введением директивы private, ограничивающей доступ из других модулей к полям и методам класса. Object Pascal пошел еще дальше по пути поддержки дисциплины программирования.
В Object Pascal появились сразу две новые конструкции для повышения надежности создаваемых программ:
Свойство можно (достаточно условно конечно) рассматривать как своего рода "мини-модуль" внутри класса, который ограничивает доступ к полям. При такой условной трактовке поле будет как бы "внутренним для класса" разделом реализации, а свойство - интерфейсным разделом, обеспечивающим доступ к этому полю с помощью строго указанных методов. Более того, в синтаксисе описания свойства в явном виде указывается метод доступа для чтения и метод доступа для записи значения свойства, что позволяет описывать свойства, доступные только по чтению или по записи. Кроме того, свойства предоставляют также дополнительные возможности реализации визуального программирования, для поддержки которого была введена стандартная директива published.
Перечислим возможности новой языковой конструкции "свойство" более подробно.
Обобщая описанные преимущества свойств, можно сделать вывод, что свойства служат, с одной стороны, для ограничения доступа к полям и для повышения надежности создаваемых программ, а с другой стороны, для разработки собственных компонентов, свойства которых станут доступны через Object Inspector интегрированной среды Delphi.
Учитывая оригинальность конструкции "свойство" приведем ее строгий синтаксис, который показан на рисунках 1 и 2.
Рис.1. Систаксис конструкции "свойство" (начало)
Рис.2. Систаксис конструкции "свойство" (окончание)
Как видно, синтаксис допускает достаточно большое число различных вариантов записи свойств. Чтобы было легче разобраться в этом многообразии, сделаем классификацию свойств.
Свойства можно разделять по четырем различным признакам:
Сделанная по указанным признакам классификация свойств приведена ниже.
Со следующего шага мы начнем знакомиться с различными вариантами описания и использования свойств .