Язык Object Pascal. Классификация типов данных. Тип данных классы. Методы
Инкапсулированные (объединенные) в классе процедуры и функции называются методами. Они объявляются также как и обычные подпрограммы:
Type Tmyclass = class;
Function MyFunc (aPar:integer):integer;
Procedure MyProcedure;
End;
Доступ к методам класса, как и к его полям возможен с помощью составных имен.
var aObject:TMyclass;
begin
aObject.MyProcedure;
end.
Методы класса могут перекрываться в потомках.
Type
TParentclass = class;
Procedure Dowork;
End;
TchildClass = class(tparentclass);
Procedure Dowork;
End;
Потомки обоих классов могут выполнять сходные по названию процессы DoWork, но в каждом случае делать по-разному.
Реализация компилятором.
В О.Паскале чаще используется динамичное замещение методов на этапе прогона (выполнения) программы. Для реализации этого – метод, замещаемый в родительском классе должен объявляться как динамический с директивой Dynamic, иди Virtual. Встретив такое объявление компилятор создает две таблицы DMT(DynamicMetodTable) и VMT(VirtualMT), и поместит в них адреса точек входа, соответственных динамических и виртуальных методов. При каждом обращении к замещенному методу компилятор вставляет ход, позволяющий адрес точки входа в подпрограмму или иную таблицу.
В классе потомки, замещающие метод, объявляется с директивой Override (перекрыть), получив это указание, компилятор создает вход, который на этапе прогона программы поместит в родительскую таблицу точку входа метода класса потомка, что позволяет родителю выполнять нужное действие с помощью нового метода. Пусть например класс с помощью методов SHOW and Hide показывает что-то на экране и стирает что-то с экрана. Для создания изображения он использует метод Draw с логическим параметром
Type TvisualObject = class(Twincontrol);
Procedure Hide;
Procedure Show;
Procedure Draw(IsShow:Boolean);virtual;
End;
TvisualchildObject = class(TVisualObject);
Procedure Draw(IsShow:boolean);override;
End;
{Реализация методов Show и Hide}
Procedure TVisualObject:show;
Begin
Draw(True);
End;
Procedure TvisualObject:Hide;
Begin
Draw(False);
End;
Методы Draw у родителей и потомков имеют разную реализацию и создают разные изображения, в результате родительские методы Show and Hide показывают или стирают те или иные изображения будут в зависимости от конкретной реализации метода Draw у любого из своих потомков.
Динамическое связывание в полной мере реализует полиморфизм класса.
Дата добавления: 2021-10-28; просмотров: 100;