Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ГЭ_У_Студентам / ТРПС_2010.doc
Скачиваний:
62
Добавлен:
05.06.2015
Размер:
4 Mб
Скачать

16 - Статические и виртуальные методы

ОТВЕТ НА ВОПРОС ЛУЧШЕ ПИСАТЬ НА ОСНОВЕ МАТЕРИАЛОВ 3-4 СЕМЕСТРА, А НЕ ПО ИСТОЧНИКАМ INTERNET!!! ОБЯЗАТЕЛЬНО ДОЛЖНЫ БЫТЬ ПРИМЕРЫ!!! См. распечатки

Методы – это процедуры и функции, описанные внутри класса и предназначенные для операций над его полями. В состав класса входит указатель на специальную таблицу, где содержится вся информация, нужная для вызова методов. От обычных процедур и функций методы отличаются тем, что им при вызове передается указатель на тот объект, который их вызвал. Поэтому обрабатываться будут поля именно того объекта, который вызвал метод. Внутри метода указатель на вызвавший его объект доступен под зарезервированным именем Self.

Базовым объектным классом Delphi является Tobject. Методы по поведению при наследовании делятся на три типа : статические, виртуальные и динамические, перегружаемые.

Понятия раннего и позднего связывания

Статические: полностью перекрываются в классах-потомках. При этом можно полностью изменить объявление метода.

Виртуальные и динамические: должны при наследовании сохранять наименование и тип. Перегружаемые методы дополняют механизм наследования возможностью использовать нужный вариант метода (собственный или родительский) в зависимости от условий применения.

Абстрактными называются методы, которые определены в классе, но не содержат никаких действий, никогда не вызываются и обязательно должны быть переопределены в потомках класса. Абстрактными могут быть только виртуальные или динамические методы.

Динамические и виртуальные методы должны быть объявлены путем добавления соответствующей директивы virtual или dynamic. С точки зрения наследования методы этих двух видов одинаковы: они могут быть перекрыты в дочернем классе только одноименными методами, имеющими тот же тип.

Динамические методы вызываются медленнее, но позволяют более экономно расходовать память. Каждому динамическому методу системой присваивается уникальный индекс, в DMT класса хранятся индексы и адреса только тех динамических методов, которые описаны в данном классе. При вызове динамического метода происходит поиск в этой таблице, в случае неудачи просматриваются таблицы всех классов предков в порядке иерархии и наконец класс TObject, где имеется стандартный обработчик вызова динамических методов.

ОСМЫСЛЕННЫЙ ПРИМЕР

Перегрузка методов нужна, чтобы произвести одинаковые или похожие действия с разнотипными данными. Для этого и существуют перегружаемые методы, объявляемые при помощи директивы Overload

Объявив метод перегружаемым в программе можно использовать обе его разнотипных реализации одновременно, чего не позволяют сделать ни статические ни виртуальные методы. На перегрузку методов накладывается ограничение – нельзя перегружать методы, находящиеся в области видимости published.

Поля и методы объекта могут относиться к четырем секциям, отличающихся областями видимости: общими(public), личными(private), защищенными(protected) и опубликованными(published)