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


Типы и подтипы - часть 4


3.3.2. ОПИСАНИЯ ПОДТИПОВ

Описание подтипа объявляет подтип.

описание-подтипа ::= subtype идентификатор is указание-подтипа; указание-подтипа ::= обозначение-типа [ограничение] обозначение-типа ::= имя -типа|имя- подтипа

ограничение ::= ограничение-диапазона | ограничение-плавающего-типа | ограничение - фиксированного - типа | ограничение-индекса | ограничение-дискриминанта

Обозначение типа обозначает тип или подтип. Если обозначение типа — имя типа, то оно обозначает этот тип, а также соответствующий неограниченный подтип. Базовым типом,

соответствующим обозначению типа,

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

Указание подтипа определяет подтип базового типа, соответствующего обозначению типа.

Если в указании подтипа после обозначения типа стоит ограничение индекса, то обозначение типа не должно обозначать подтип с уже ограниченным индексом. Аналогично для ограничения дискриминанта: обозначение типа не должно иметь ограничение дискриминанта.

Предвыполнение описания подтипа состоит из предвыполнения указания подтипа. Это предвыполнение создает подтип. Если указание подтипа не включает ограничение, то определяемый подтип тот же, что и указанный обозначением типа подтип. Предвыполнение указания подтипа, содержащего ограничение, происходит следующим образом:

а) вначале предвыполняется ограничение;

б) ограничение проверяется на

совместимость

с типом или подтипом, заданным обозначением типа.

После предвыполнения ограничения получается условие, наложенное ограничением. (Правила предвыполнения ограничения таковы, что выражения и диапазоны ограничений вычисляются при предвыполнении всех этих ограничений.) Правила определения совместимости даны в соответствующих разделах для каждой формы ограничения. Эти правила таковы, что если ограничение совместимо с подтипом, то наложенное ограничением условие не может противоречить никакому условию, уже заданному для значений этого подтипа. В противном случае возбуждается исключение CONSTRAINT_ERROR.




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