На этом шаге мы напомним общие понятия о классах и рассмотрим описание
классов в 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).
На следующем шаге мы поговорим об иерархии классов.