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

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;

Констатны личного типа задаются в пакете в виде субконстант.

Ш   СОВЕТЫ:     ——————

*  Используйте личные типы вместо обычных.

*  Отдавайте предпочтение ограниченным личным типам вместо лич­ный.

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