Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЯВУ лекции.doc
Скачиваний:
18
Добавлен:
27.10.2018
Размер:
592.38 Кб
Скачать

Статические методы

Статические методы аналогичны обычным функциям или процедурам OPascal. Адрес такого метода известен среде OPascal на стадии компиляции, поэтому OPascal производит статический вызов метода во время выполнения программы. Статические методы работают быстрее других методов, но не могут быть перегружены (overload).

Статический метод может быть описан так:

type

TCortiponent = class procedure MyProcedure;

end;

Здесь метод MyProcedure является статическим.

Виртуальные методы

Виртуальные методы, в отличие от статических, поддерживают перегрузку, поэтому вызов таких методов для среды Delphi намного сложнее (заранее неизвестен адрес конкретного вызываемого метода). Для того чтобы решить эту проблему, Delphi строит таблицу виртуальных методов (Virtual Method Table), благодаря которой компилятор может определить адрес метода во время выполнения программы. Такая таблица содержит виртуальные методы не только самого класса или компонента, но и его предков. Естественно, хранение такой таблицы увеличивает расходы памяти, но вызов виртуальных методов выполняется быстрее, чем вызов динамических методов.

Описание виртуального метода выглядит следующим образом:

type

TComponent = class procedure MyProcedure; virtual;

end;

В данном случае метод MyProcedure — виртуальный.

Динамические методы

Динамические методы похожи на виртуальные, они также могут быть перегружены. Основная разница между виртуальными и динамическими методами — в способе их вызова. Если для виртуальных методов строится таблица виртуальных методов, то каждому динамическому методу присваивается уникальное число-идентификатор, после чего строится таблица динамических методов (Dynamic Method Table), в которую заносится данное число, а также адрес метода. Еще одно отличие динамических методов от виртуальных заключается в том, что таблицы динамических методов содержат методы только одного класса (не включая его предков). Поэтому существенно экономится память, но замедляется время работы, т. к. для поиска адреса метода обычно приходится просматривать несколько таблиц динамических методов.

Описание динамического метода может выглядеть так:

type TComponent = class

procedure MyProcedure; dynamic;

end;

Методы обработки сообщений

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

type

TComponent = class procedure MyProcedure(Var A: TMessage); message wm_MessageWindows;

end;

После служебного слова message ставится значение (в нашем случае wm_MessageWindows), которое определяет сообщение операционной системы, в ответ на которое будет вызван метод MyProcedure.

Конструкторы и деструкторы

Метод-конструктор применяется для выполнения действий по созданию объекта, а метод-деструктор для выполнения действий по удалению объекта.

В классе TObject содержатся конструктор Create и деструктор Free, которые соответственно, выделяют и освобождают память под элементы класса.

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

Конструкторы и деструкторы всегда являются виртуальными методами

Пример:

type

TObj = class

A:TList;

B:integer;

constructor Create(initb:integer);

destructor Free;

end;

...

//действия при создании объекта

constructor TObj.Create(initb:integer);

begin

A:=TList.Create; //создание списка

B:=initb; //инициализация переменной B

end;

//действия при удалении объекта

destructor TObj.Free;

begin

A.Free; //удаление списка

end;