Обучение - Классы
Автор: Вычегжанин Сергей
WEB-сайт: http://daddy.mirgames.ru
В языке Object Pascal (на котором построен Delphi) классы являются специальными типами данных и используются для описания объектов. Соответственно объект, имеющий тип какого либо класса, является экземпляром этого класса или переменной этого типа.
Класс представляет собой тип записи, имеющий в своём составе такие элементы, как поля, свойства и методы.
Поле класса аналогичны полям записи и служат для хранения информации об объекте.
Методами называются процедуры и функции, предназначенные для обработки полей.
Свойства что-то среднее между полями и методами.
С одной стороны, свойства можно использовать как поля, например, присваивая им значения с помощью оператора присваивания, с другой стороны, внутри класса доступ к значениям свойств выполняются методами класса.
Описания класса имеют следующую структуру:
type
Имя класса = class(Имя класса - родителя)
private
Частные описания
protected
Защищённые описания
public
Общедоступные описания
published
Опубликованные описания
end;
Порядок наследования классов таков: при создании новых классов класс-потомок наследует все поля родителя, при этом удаление или переопределение этих полей невозможно.
Поля.
Поле класса представляет собой данные, содержащиеся в классе. Поле описывается как обычная переменная и может принадлежать к любому типу.
В ниже приведённом примере к стандартным полям класса TObject добавляется ещё 9 полей и одно событие.
Согласно принятому соглашению, имена полей должны начинаться с префикса F (от англ. Filed - поле).
Свойства.
Свойства реализуют механизм доступа к полям. Каждому свойству соответствует поле, содержащее значение свойства, и два метода, обеспечивающих доступ к этому полю. Описание свойства начинается со слова property. Работа с полем происходит с помощью двух зарезервированных методов (read и write) использующихся для чтения значения поля, связанного со свойством, или записи нового значения.
В приведённом примере используется 9 свойств, по одному на каждое поле.
Методы.
Метод это обычная функция или процедура. Заголовок метода располагается в описании класса, а сам код метода находится в разделе реализации.
Вот посмотрите пример описание класса кнопки из игры "В осаде":
TDXButton = class
//Имя класса-родителя не определенно, значит класс потомок TObject
private //Частные описания
FSelected: Boolean; //Поля
FEnabled: Boolean;
FHighLighted: Boolean;
FCaption: string;
FX: Integer;
FY: Integer;
FWidth: Integer;
FHeight: Integer;
FVisible: Boolean;
protected //Защищённые описания
function GetBoundsRect: TRect; //Метод
public //Общедоступные описания
FOnClick: TNotifyEvent; //Событие
procedure DoDraw; virtual; //Процедура (метод)
constructor Create; virtual; //Конструктор...
destructor Destroy; override; //... и деструктор объекта
property BoundsRect: TRect read GetBoundsRect; //Свойства
property Selected: Boolean read FSelected write FSelected;
property Enabled: Boolean read FEnabled write FEnabled;
property HighLighted: Boolean read FHighLighted write FHighLighted;
property X: Integer read FX write FX;
property Y: Integer read FY write FY;
property Width: Integer read FWidth write FWidth;
property Height: Integer read FHeight write FHeight;
property Visible: Boolean read FVisible write FVisible;
end;
Здесь класс TDXButton создаётся на основе класса TObject который является базовым классом для всех классов, поэтому его имя не указано как имя класса-родителя.
Этот класс содержит 10 полей: 9 из которых находятся в private секторе, а 1 в protected. Он также содержит 2 метода и 9 свойств находящейся в области public и используются для доступа к первым 9 полям.
А вот ещё описание графической кнопки на основе TDXButton (без комментариев):
TDXImageButton = class(TDXButton)
private
FImage: TPictureCollectionItem;
protected
function GetDrawImageIndex: Integer;
public
constructor Create; override;
procedure DoDraw; override;
procedure OnMouseUp;
procedure OnMouseMove(x, y: integer);
procedure OnMouseDown(x, y: integer);
property OnClick: TnotifyEvent read Fonclick write fonclick;
property Image: TPictureCollectionItem read FImage write FImage;
property Caption: string read FCaption write FCaption;
end;
В общем здесь всё достаточно легко и понятно, удачи!
|