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 в случае, если аргумент функции не является внешним представлением тэга. СОВЕТЫ : Определяйте один тэговый тип в пакете. Используйте тэговый тип для сохранения общего интерфейса для различных реализаций абстракции. |
| Оглавление| |