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

15.4. Правила построения и использования объектов а. Правила наследования

  1. Информационные поля и методы родительского типа наследуются всеми дочерними типами независимо от числа промежуточных уровней иерархиии.

  2. Доступ к полям и методам родительских типов для дочерних выполняется так, как будто бы они описаны в самом дочернем типе.

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

  4. Дочерний тип может доопределить произвольное число собственных методов и информационных полей.

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

  6. В противоположность информационным полям (правило 3) идентификаторы методов в дочерних типах могут совпадать с именами методов в родительских типах. В этом случае дочерний метод подавляет одноименный ему родительский, вследствие чего для объекта дочернего типа будет вызываться метод именно дочернего, а не родительского типа. В то же время остается и возможность вызова родительского типа. Для этого необходимо использовать квалифицированный (уточненный) идентификатор, в котором перед именем метода помещается имя требуемого родительского класса. Пример записи квалифицируемого идентификатора – TPoint.Show.

Б. Виртуальные методы

  1. Виртуальными следует обявлять те методы, которые изменяются в классе-потомке.

  2. Если метод одного из классов в иерархии объявлен как виртуальный, то все классы иерархии долны также объявить его виртуальным.

  3. Список формальных параметров любого виртуального метода во всей иерархии должен совпадать и по типам и по именам параметров.

В. Ранее и позднее связывание

Ранее связывание – процесс, в результате которого вызовы статических правил однозначно разрешаются компилятором во время трансляции метода.

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

Г. Совместимость классов объектов

С

var

point : PPoint;

circle : PCircle;

rect : PRect;

txt : PText;

begin

допустимо недопустимо

point := circle; circle := point;

rect := txt; txt := rect;

point := txt;

овместимость классов относительно операции присваивания простираетсятолько от потомков к прародителям, но не наоборот:

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

Type

Pitem = ^Titem;

TItem=record

Info : PPoint; {указатель на объект класса TPoint}

pred, next :Pitem;

end;

procedure Add(var Head:Pitem; p:Pitem);

begin

. . . .

end;

var

Head:Pitem;

newItem:Pitem;

tt:Ptext; { указатель на объект TText; }

{ TPoint - для него прародительский класс }

begin

. . . .

Head:=nil;

New(tt, Init(100,100,’Слово',blue));

New(newItem);

NewItem^.Info := tt;

Add(Head, newItem);

. . .

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