Введение в программирование - Учебное пособие (Корочкин А. В.)

16.1 тэговые типы

Тэговые типы (   tagged   types )   - это   запись или приватный тип, помеченный словом tagged.

TYPE        Имя        IS        [ABSTRACT]        TAGGED

(   Запись |    PRIVATE   );

type   Plan is   tagged record

X : fixed:

Y : fixed: end   record;

type   Green    is   tagged private; type   Data      is   tagged     null   record;

198

199

Ада 95. Введение в программирование

Глава 16. Обьсктно-ориентированное программирование

 

package    RESOURCE     is

type    Control     is  tagged private; private

type    Control     is   tagged record

Item      :   integer; Numbe   :   natural; end  record;

end   RESOURSE;

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

Особенностью тэгового типа является возможность добавления к нему новых компонент при построении на его основе производных типов. Этот процесс называется расширением типа.

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

package Ada . Tags   is

type Tag is private ;

function    Expanded_Name (Т :   Tag )   return   String ;

function External_Tag (Т: Tag) return String ; function lnternal_Tag ( External: String ) return Tag ; Tag_Error: exception ;

private

...   - - не  определено  в  языке end Ada. Tags ;

Функция Expanded_Name возвращает имя первого подтипа специфического типа, идентифицированного с помощью тэга Т.

Функция External_Tag возвращает символьную строку, являющуюся внешним представленим данного тэга.

Функция lnternal_Tag возвращает тэг, который соответствует данному внешнему представлению тэга, или возбуждает исключение Tag_Error в случае, если аргумент функции не является внешним представлением тэга.

СОВЕТЫ :

Определяйте один тэговый тип в пакете.

Используйте тэговый тип для сохранения общего   интерфейса для

различных реализаций  абстракции.