8.2 приватные типы и приватные расширенияПрвиатные ( личные) типы ( private types ) и приватные расширения ( private extensions ) обьявляются в видимой части спецификации пакта и позволяют отделить характеристики типа, которые можно использовать вне программного модуля, от характеристик, которые непосредственно можно использовать в пакете. То есть для приватных типов вводятся два типа характеристик: 'внутренние - для использования только в пакете и внешние - разрешаемые вне пакета. Описание приватного типа: TYPE Имя_Типа [ Дискриминант J IS [ [ ABSTRACT] TAGGED] [LIMITED] PRIVATE; Описание приватного расширения: TYPE Имя_Типа [ Дискриминант ] IS [ABSTRACT] NEW WITH PRIVATE; П Пример объявления приватного типа: type Elem is private; type File_X ( N : integer ) is limited private ; type Rev is tagged private; type Pipe_Control is abstract tagged private; П Пример приватного расширения типа: type Stone is new Wood with private; type Dust is abstract new Park with private; type Stars is new Moon with private; Для типа могут существовать предопределенные примитивные операции. Они либо наследуются, либо определяются непосредственно при создании типа. Например, типа Integer имеет предопределенные операции "+", "-", "*", "/" и др. Если тип описан как приватный, то для него примитивные операции не наследуются. Для приватного типа вне пакета разрешены только следующие операции: • присваивания (: = ); • создания обьектов данного типа ; Ада 95. Введение в программирование 74 Глава 8. Пакеты 75
• сравнения на равенство и неравенство ( = Ф); • проверка на принадлежность ( in , not in); • передача обьектов типа в качестве параметров, а так же операции, описанные в видимой части пакета для этого типа в виде подпрограм (приватные операции). Описание личного типа выполняется как в видимой, так и в личной частях спецификации. В видимой части личные типы задаются здесь только на уровне их идентификаторов. В личной части выполняются полные описания личного типа. К пользователю пакета эти описания отношения не имеют (для него они невидимы) и предназначены для компилятора при реализации видимой части и использования в теле пакета. П Пример: package SMO is type Matrix is private ; - - объявление личного типа procedure Transp_Matr ( MX : in out Matrix); private - - приватная часть спецификации type Matrix is array (1 .. 100,1 .. 100 ) of real;- -детали ~ реализации личного типа Venta : constant Matrix; - - субконстанта end SMO; Констатны личного типа задаются в пакете в виде субконстант. Ш СОВЕТЫ: —————— * Используйте личные типы вместо обычных. * Отдавайте предпочтение ограниченным личным типам вместо личный. * Используйте личные дочерние пакеты для локальных описаний, используемых только в реализации спецификации пакета. |
| Оглавление| |