Шаг 133.
Понятие свойства

    На этом шаге мы приведем общие сведения о свойствах.

    Как известно объектно-ориентированная методология (ОО-методология) базируется на "трех китах" - понятиях инкапсуляции, наследования и полиморфизма.

    Понятие инкапсуляции и хороший стиль объектно-ориентированного программирования требуют, чтобы обращение к полям объектов выполнялось исключительно посредством методов. Однако призывы соблюдать хороший стиль программирования еще со времен основоположников структурного программирования Дейкстры, Хоара, Дала, Вирта зачастую так и остаются только призывами, если они не подкрепляются соответствующими синтаксическими конструкциями языков программирования. Так было с понятием модуля и модульного программирования. То же самое наблюдается и при применении ОО-методологии, когда поля объектов используют как поля обычных записей, забывая о необходимости инкапсуляции. Проблема написания хороших модулей (в смысле логических единиц программы) была решена с разработкой синтаксической конструкции "модуль", поддерживающей принцип скрытия информации Парнаса. Проблема написания хороших классов в Borland Pascal была частично решена введением директивы private, ограничивающей доступ из других модулей к полям и методам класса. Object Pascal пошел еще дальше по пути поддержки дисциплины программирования.

    В Object Pascal появились сразу две новые конструкции для повышения надежности создаваемых программ:

    Свойство можно (достаточно условно конечно) рассматривать как своего рода "мини-модуль" внутри класса, который ограничивает доступ к полям. При такой условной трактовке поле будет как бы "внутренним для класса" разделом реализации, а свойство - интерфейсным разделом, обеспечивающим доступ к этому полю с помощью строго указанных методов. Более того, в синтаксисе описания свойства в явном виде указывается метод доступа для чтения и метод доступа для записи значения свойства, что позволяет описывать свойства, доступные только по чтению или по записи. Кроме того, свойства предоставляют также дополнительные возможности реализации визуального программирования, для поддержки которого была введена стандартная директива published.

    Перечислим возможности новой языковой конструкции "свойство" более подробно.

  1. Свойства ограничивают доступ к полям, указывая конкретные методы для чтения и для записи значения поля.
  2. Свойства могут быть объявлены с характеристиками "только для чтения" и "только для записи".
  3. Методы доступа к свойству могут быть объявлены виртуальными, что предоставляет дополнительную гибкость в программировании.
  4. Свойства могут оказывать побочные эффекты, которые выражаются в том, что изменение значения свойства во время выполнения приводит к одновременному изменению внешнего вида компонента на экране монитора.
  5. Некоторые свойства могут быть сделаны доступными для программиста на этапе разработки проекта посредством их помещения в часть published-описаний, тогда как обычные поля объектов могут быть доступны только во время выполнения.
  6. При создании собственных компонент, после того, как они будут помещены на палитру компонентов интегрированной среды Delphi, их опубликованные свойства становятся доступными через Object Inspector.

    Обобщая описанные преимущества свойств, можно сделать вывод, что свойства служат, с одной стороны, для ограничения доступа к полям и для повышения надежности создаваемых программ, а с другой стороны, для разработки собственных компонентов, свойства которых станут доступны через Object Inspector интегрированной среды Delphi.

    Учитывая оригинальность конструкции "свойство" приведем ее строгий синтаксис, который показан на рисунках 1 и 2.


Рис.1. Систаксис конструкции "свойство" (начало)


Рис.2. Систаксис конструкции "свойство" (окончание)

    Как видно, синтаксис допускает достаточно большое число различных вариантов записи свойств. Чтобы было легче разобраться в этом многообразии, сделаем классификацию свойств.

    Свойства можно разделять по четырем различным признакам:

    Сделанная по указанным признакам классификация свойств приведена ниже.

  1. По индексированию:
    • простые свойства (без индексов);
    • свойства-массивы;
    • свойства со спецификатором index.
  2. По доступу:
    • полный доступ;
    • только для чтения;
    • только для записи.
  3. По сохранению в файле формы:
    • сохраняемые;
    • несохраняемые.
  4. По типу:
    • простых типов;
    • перечислимых типов;
    • типов-диапазонов;
    • множественных типов;
    • типа "запись";
    • типа "класс";
    • типа "массив";
    • указательных типов;
    • процедурных типов.

    Со следующего шага мы начнем знакомиться с различными вариантами описания и использования свойств .




Предыдущий шаг Содержание Следующий шаг