Справочное руководство по языку Ада-83


Описания личных типов и субконстант - часть 5


/p>

Примечание.

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

реализовать

личный тип в виде типа конкретного класса (например, в виде индексируемого типа), можно использовать только внутри пакета.

Последствия такой фактической реализации сказываются тем не менее везде. Например, производится некоторая инициализация компонент по умолчанию; атрибут SIZE вырабатывает раз'мер полного типа; правила зависимости задач распространяются также на компоненты — объекты задачного типа.

Пример:

package KEY_MANAGER is

type KEY is private; NULL_KEY : constant KEY; procedure GET_KEY(K : out KEY); function "<" (X, Y : KEY) return BOOLEAN: private

type KEY is new NATURAL: NULLKEY : constant KEY := 0; end;

package body KEY_MANAGER is

LAST_KEY : KEY := 0; procedure GET_KEY(K : out KEY) is begin

LAST_KEY := LAST_KEY + 1; К := LAST_KEY; end GET_KEY;

function "<" (X. Y : KEY) return BOOLEAN is begin

return INTEGER(X) < INTEGER(Y); end "<"; end KEY_MANAGER;

Примечание к примеру:

Операциями, применимыми к объектам типа KEY вне пакета KEY MANAGER являются: присваивание, сравнение на равенство и неравенство, процедура GET_KEY и операция "<";

сюда не включаются другие операции отношения, например >=

или арифметические операции.

Явно описанная операция " <" скрывает предопределенную операцию < , неявно опи_ санную полным описанием типа. В теле функции необходимо явное преобразование Х и Y к типу INTEGER для явного вызова операции

"<"

над этим типом. С другой стороны результат функции мог бы быть записан в виде

not(X

> = Y), так как операция " > = не переопре-




Начало  Назад  Вперед



Книжный магазин