Реферат: Объектно-ориентированный подход к программированию

Var

MyClass: TmyClass;

Class1: TmySun1Class;

Class2: TmySun2Class;

Begin

Class1:=TmySun1Class.Create;

Class2:=TmySun2Class.Create;

MyClass:= Class1;

Label1.Caption:= MyClass.GetData;

MyClass:= Class2;

Label2.Caption:= MyClass.GetData;

end;

Если посмотреть на этот код внимательно, то можно понять, что у компилятора нет возможности определить метод какого именно класса нужно вызывать. Поэтому, для определения адреса метода используются специальные таблицы, где хранятся адреса на виртуальные и динамические методы: VMT - таблица виртуальных методов и DMT - таблица динамических методов. Когда компилятор встречает указатель на виртуальный метод, то он ищет его адрес в VMT, где хранятся все адреса виртуальных методов класса унаследованных и перекрытых, поэтому такая таблица занимает много памяти, хотя и способ вызова метода работает сравнительно быстро. Динамические методы вызываются медленнее, но занимают меньше памяти, т.к. в них хранятся адреса динамических методов только данного класса и их индексы. При вызове динамических методов проводится поиск по этой таблице, если метод не найден, то поиск продолжается в DMT предков вплоть до Tobject, где вызывается стандартный обработчик вызова динамических методов. Зачем же нам все это надо? При проектировании иерархии классов предметной области, нужно статическими делать методы, которые не меняют своего поведения в потомках, т.е. при более детальном рассмотрении явления. Динамические и виртуальные методы могут меняться при переходе от общего к частному. Вспомните класс Tfield, который является общим предком для всех классов-полей таблицы. Потомки этого класса реализуют доступ к столбикам таблицы разных типов от целого числа до BLOB массива, однако, Вы можете иметь удобный доступ к этим потомкам через указатель типа Tfield и работать с ними одинаково.

Перегрузка методов, процедур и функций

Перегрузка объявляется с помощью зарезервированного слова overload. Рассмотримпример:

Type

TmyDateClass=class(TObject)

private

Adate: TdateTime;

Public

Procedure SetDate(Val: TDateTime); overload; // Объявляемвозможностьперегрузки

end;

TmySecondDateClass=class(TmyDateClass)

private

Adate: TdateTime;

К-во Просмотров: 400
Бесплатно скачать Реферат: Объектно-ориентированный подход к программированию