Шаг 12.
Классы в Delphi

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

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

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

    Тип класс - это структура данных, состоящая из полей, методов, свойств. Поля содержат данные определенного типа. Методы - это функции и процедуры, описанные внутри класса и предназначенные для операций над его полями. Свойства - это специальный механизм классов, регулирующий доступ к полям. Свойство описывает один или два метода, которые осуществляют некоторые действия над данными того же типа, что и свойство. Например, обычная кнопка в окне приложения обладает такими свойствами, как цвет, размеры, положение. Для экземпляра класса "кнопка" значения этих свойств представлены специальными переменными, определяемыми ключевым словом Property. Цвет может задаваться свойством Color, размеры - свойствами Width и Height и т.д.

    Так как свойство обеспечивает обмен данными с внешней средой, то для доступа к его значению используются специальные методы класса. Например:

  Туре 
    TMyObject = class(TObject)
        Function GetColor : ТSomeType; 
        Procedure SetColor (ANewValue: TSomeType); 
        Property MyColor : TSomeType Read GetColor Write SetColor; 
    end;

    Для того чтобы использовать новый тип в программе, нужно объявить переменную этого типа:

  Var
    MyObjесt: TMyObjесt;

    В данном примере доступ к значению свойства MyColor осуществляется через вызовы методов GetColor и SetColor. К методам в явном виде не обращаются, достаточно записать:

  MyObject.MyColor := <значение>;
           или 
  <переменная>:= MyObject.MyColor;

и компилятор оттранслирует эти операторы в вызовы соответствующих методов: записи (SetColor) и чтения (GetColor).

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

  Property OnMyEvent: TMyEvent Read FOnMyEvent1 Write FOnMyEvent2 default asValue;  
Здесь:

    FOnMyEvent1, FOnMyEvent2 - поля, содержащие адреса некоторых методов. Присвоить такому свойству значение - значит, указать объекту адрес метода, который будет вызываться в момент наступления события. Такие методы называют обработчиками событий. Таким образом, обработчик события - фрагмент программы, который выполняется в ответ на определенное изменение в программе или в Windows.

    Каждый новый класс в Delphi должен быть объявлен глобально. Для этого используется зарезервированное слово Class. Объявление определяет функциональные возможности класса. Объявление классов в модуле производится в разделе объявления типов. Пример объявления класса и объекта в Delphi:

  Туре
    TForm1 = class (TForm) 
               Label1: TLabel; 
               Edit1: TEdit; 
               CloseBtn: TBitBtn; 
               OkBtn: TBitBtn; 
             end; 
  Var
     Form1 : TForm1;

    В объявлении типа определен новый класс - TForm1, наследуемый от класса TForm, содержащегося в библиотеке визуальных компонентов. На это указывает зарезервированное слово Class. Данный тип содержит указатели на компоненты, которые были помещены на форму:

    Область видимости идентификатора компонента, объявленного в описании класса, простирается от его объявления до конца определения класса, а также распространяется на все потомки этого класса и на все блоки реализации методов класса. Область видимости идентификатора компонента зависит от раздела, в котором объявлен этот идентификатор.

    В объявлениях типов класса имеются разделы частных (private), общих (public), защищенных (protected) и опубликованных (published) объявлений.

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

    Поля данных и методы, объявленные в разделе общих объявлений, доступны для всех процедур, программный код которых расположен в области видимости данного объекта. В разделе общих объявлений должны быть объявлены поля данных и методы, к которым будут иметь доступ методы других классов.

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

    Свойства, расположенные в разделе опубликованных объявлений, отображаются в Инспекторе объектов (Object Inspector).

    На следующем шаге мы поговорим об иерархии классов.




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