
- •Введение в объектно-ориентированное программирование (ооп)
- •Краеугольные камни ооп Формула объекта
- •Природа объекта
- •Объекты и компоненты
- •Классы объектов
- •Три кита ооп
- •Объекты
- •Конструкторы и деструкторы
- •Свойства Понятие свойства
- •Методы получения и установки значений свойств
- •(Материал следующих трех глав при первоначальном знакомстве с материалом можно опустить) Свойства-массивы
- •Свойство-массив как основное свойство объекта
- •Методы, обслуживающие несколько свойств
- •Наследование Понятие наследования
- •Контроль и преобразование типов
- •Разграничение доступа к атрибутам объектов
- •Классы и объекты Delphi
- •Interface
- •Implementation
Классы и объекты Delphi
Для реализации интерфейса Delphi использует библиотеку классов, которая содержит большое количество разнообразных классов, поддерживающих форму и различные компоненты формы (командные кнопки, поля редактирования и т. д.).
Во время проектирования формы приложения Delphi автоматически добавляет в текст программы необходимые объекты. Если сразу после запуска Delphi просмотреть содержимое окна редактора кода, то там можно обнаружить следующие строки:
unit Unit1;
Interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Implementation
{$R *.dfm}
end.
Это описание класса исходной, пустой формы приложения и объявление объекта — формы приложения.
Когда программист, добавляя необходимые компоненты, создает форму, Delphi формирует описание класса формы. Когда программист создает функцию обработки события формы или ее компонента, Delphi добавляет объявление метода в описание класса формы приложения.
Помимо классов визуальных компонентов в библиотеку классов входят и классы так называемых невизуальных (невидимых) компонентов, которые обеспечивают создание соответствующих объектов и доступ к их методам и свойствам. Типичным примером невизуального компонента является таймер (тип TTimer) и компоненты доступа и управления базами данных. Существует еще множество других классов.
Каждый компонент принадлежит к строго определенному классу, а все конкретные экземпляры компонентов, вставляемые в форму, получают имя класса с добавленным числовым индексом. По используемому в Delphi соглашению все имена классов начинаются с буквы Т. Таким образом, имя TForm1 означает имя класса, созданного по образцу стандартного класса TForm.
Если на форму поместить кнопку и метку, а также сформировать для кнопки обработчик события OnClick, то увидите следующие строки:
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
begin
Label1.Caption:=’Привет’;
end;
Строка
TForm1 = class(TForm)
определяет новый класс TForm1, который порожден от (создан по образцу) стандартного класса TForm.
Строка
Form1: TForm1;
создает экземпляр этого класса с именем Form1. Стандартный класс TForm описывает пустое Windows-окно, в то время как класс TForm1 описывает окно с уже вставленными в него компонентами метка и кнопка. Описание этих компонентов содержат строки
Button1: TButton;
Label1: TLabel;
Они указывают, что компонент Button1 представляет собой экземпляр стандартного класса TButton, а компонент Label – экземпляр класса TLabel.
Замечу, что среда Delphi помещает описания компонентов, вставленных в форму, в специальную секцию без названия, которая располагается сразу за заголовком класса и продолжается до первой объявленной секции. Эта секция - published. Программисту не следует помещать в нее собственные элементы описания класса или удалять из нее элементы, вставленные средой.
За именем процедуры TForm1. ButtonClick в круглых скобках следует описание параметра вызова
Sender: TObject
(параметр с именем Sender принадлежит классу TObject). Параметр Sender вставлен Delphi “на всякий случай”: с его помощью подпрограмма Button1Click может при желании определить, какой именно компонент создал событие OnClick.
Реализация метода ButtonClick находится в разделе implementation
В нашем случае тело процедуры содержит задание свойства Caption объекту Label1.
Для нас важно то обстоятельство, что каждый раз при нажатии кнопки Button1 управление будет передаваться в тело процедуры, а значит, между словами begin и end мы можем написать любой фрагмент программы, который будет выполняться в ответ на это событие.