Язык 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;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.006 сек.