русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2014-02-04; просмотров: 904; Нарушение авторских прав


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

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

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

Виртуальные методы, в отличие от статических, поддерживают перегрузку, поэтому вызов таких методов для среды 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;

 



<== предыдущая лекция | следующая лекция ==>
Статические методы | Свойства


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 3.959 сек.