Справочник по Ada 95
3.2.2 Объявления подтипов
Объявление subtype_declaration объявляет подтип некоторого ранее объявленного типа, как определено subtype_indication.
Синтаксис
subtype_declaration ::=
subtype defining_identifier is subtype_indication;
subtype defining_identifier is subtype_indication;
subtype_indication ::= subtype_mark [constraint]
subtype_mark ::= подтип_имя
constraint ::= scalar_constraint | composite_constraint
scalar_constraint ::=
range_constraint | digits_constraint | delta_constraint
range_constraint | digits_constraint | delta_constraint
composite_constraint ::=
index_constraint | discriminant_constraint
index_constraint | discriminant_constraint
Правила разрешения имен
subtype_mark должен разрешаться для обозначения подтипа. Тип, определяемый subtype_mark, является типом подтипа, обозначаемого subtype_mark.
Динамические семантика
Выполнение subtype_declaration состоит из выполнения subtype_indication. Выполнение subtype_indication создаёт новый подтип. Если subtype_indication не включает constraint, новый подтип имеет тот же (возможно, нулевой) ограничитель, что и обозначаемый subtype_mark. Выполнение subtype_indication, которое включает constraint, происходит следующим образом:
- Сначала выполняется constraint.
- Затем проверяется, что constraint совместим с подтипом, обозначаемым subtype_mark.
Условие, накладываемое constraint, является условием, полученным после выполнения constraint. Правила, определяющие совместимость, приведены для каждой формы constraint в соответствующем подпункте. Эти правила таковы, что если constraint совместим с подтипом, то условие, накладываемое constraint, не может противоречить ни одному условию, уже наложенному подтипом на его значения. Исключение Constraint_Error возникает, если какая-либо проверка совместимости завершается неудачно.
ПРИМЕЧАНИЯ
4 scalar_constraint может быть применён к подтипу соответствующего скалярного типа (см. 3.5, 3.5.9 и J.3), даже если подтип уже ограничен. С другой стороны, composite_constraint может быть применён к составному подтипу (или подтипу доступа к составному подтипу) только в том случае, если составной подтип неограничен (см. 3.6.1 и 3.7.1).
Примеры
Примеры объявлений подтипов:
subtype Rainbow is Color range Red .. Blue; -- см. 3.2.1
subtype Red_Blue is Rainbow;
subtype Int is Integer;
subtype Small_Int is Integer range -10 .. 10;
subtype Up_To_K is Column range 1 .. K; -- см. 3.2.1
subtype Square is Matrix(1 .. 10, 1 .. 10); -- см. 3.6
subtype Male is Person(Sex => M); -- см. 3.10.1
subtype Red_Blue is Rainbow;
subtype Int is Integer;
subtype Small_Int is Integer range -10 .. 10;
subtype Up_To_K is Column range 1 .. K; -- см. 3.2.1
subtype Square is Matrix(1 .. 10, 1 .. 10); -- см. 3.6
subtype Male is Person(Sex => M); -- см. 3.10.1