Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл: Источник:
Скачиваний:
279
Добавлен:
04.03.2014
Размер:
584.19 Кб
Скачать

Язык Object Pascal.Классификация типов данных. Тип данных классы. Полиморфизм.

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

В ObjectPascalполиморфизм достигается не только описанным выше механизмом перекрытия методом родителей, но и их виртуализацией, позволяющей родительским методам обращаться к методам своих потомков.

Язык Object Pascal.Классификация типов данных. Тип данных классы. Поля.

Поля – инкапсулированные в класс данные. Поля могут быть любого типа, в том числе данными.

Type Tmyclass = class;

aIntField:integer;

aStrField:string;

aObjField:Tobject;

end;

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

Type Tmyclass = class;

FIntField:integer;

FStrField:string;

end;

var aObject:TMyclass;

begin aobject – имя переменной класса

aObject.FintField:=0; FintField – имя поля.

aObject.FstrField:=’строка символов’

Класс потомок получает поля всех своих предков и может дополнить их своими полями, но он не может переопределять поля или удалять их.

Язык Object Pascal. Классификация типов данных. Тип данных классы. Методы

Инкапсулированные (объединенные) в классе процедуры и функции называются методами. Они объявляются также как и обычные подпрограммы:

TypeTmyclass=class;

Function MyFunc (aPar:integer):integer;

ProcedureMyProcedure;

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(перекрыть), получив это указание, компилятор создает вход, который на этапе прогона программы поместит в родительскую таблицу точку входа метода класса потомка, что позволяет родителю выполнять нужное действие с помощью нового метода. Пусть например класс с помощью методовSHOWandHideпоказывает что-то на экране и стирает что-то с экрана. Для создания изображения он использует методDrawс логическим параметром

TypeTvisualObject=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у родителей и потомков имеют разную реализацию и создают разные изображения, в результате родительские методыShowandHideпоказывают или стирают те или иные изображения будут в зависимости от конкретной реализации методаDrawу любого из своих потомков.

Динамическое связывание в полной мере реализует полиморфизм класса.

Соседние файлы в папке шпора