Ада-95. Компилятор GNAT



         

Примитивные и не примитивные операции над тэговыми типами Наследование операций - часть 3


В качестве примера, рассмотрим следующее описание:

package Simple_Objects is

type Object_1 is tagged

record

Field_1 : Integer; end record;

-- примитивные операции типа Object_1 procedure Method_1 (Self: in out Object_1); . . .

package Constructors is -- внутренний пакет содержащий не наследуемые -- операции типа Object_1

function Create (Field_1_Value: in Integer) return Object_1; . . .

end Constructors; . . .

end Simple_Objects;

Здесь, функция Create, которая возвращает значение типа Object_1, расположена во внутреннем пакете Constructors.

В результате такого описания, функция Create

(а также другие подпрограммы для типа Object_1, расположенные во внутреннем пакете Constructors) не будет наследоваться потомками типа Object_1

(типами, производными от типа Object_1).

В заключение обсуждения наследования операций над тэговыми типами, следует сделать одно важное замечание.

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

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

Осуществление этого может быть достаточно трудоемким процессом для сложной иерархии типов.

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




Содержание  Назад  Вперед