Статус документа
Статус документа

ГОСТ 27831-88 (ИСО 8652-87) Язык программирования АДА

     3.7. Именуемые типы


Объект именуемого типа (запись) - это составной объект, состоящий из именованных компонентов. Значение записи - составное значение, состоящее из значений своих компонентов.

определение_именуемого_типа : : =

record

список_компонентов

end record

список_компонентов : : =

описание_компонента {описание_компонента}

{описание_компонента} раздел_вариантов null;

описание_компонента : : =

список_идентификаторов : определение_подтипа_компонента

[:= выражение];

определение_подтипа_компонента : : =указание_подтипа


Каждое описание компонента задает компонент именуемого типа. Кроме этих компонентов, в компоненты именуемого типа включаются любые компоненты, описанные спецификациями дискриминантов в описании именуемого типа. Идентификаторы всех компонентов именуемого типа должны быть различными. Использование имени, обозначающего компонент записи, отличный от дискриминанта, недопустимо в том же определении именуемого типа, содержащем описание этого компонента.

Описание компонента с несколькими идентификаторами эквивалентно последовательности единичных описаний компонентов, как пояснено в разд.3.2. Каждое единичное описание компонента описывает компонент записи, подтип которого задан определением подтипа компонента.

Если описание компонента включает составной ограничитель присваивания, за которым следует выражение, то это выражение является выражением по умолчанию для компонента записи; выражение по умолчанию должно иметь тип компонента. Выражения по умолчанию недопустимы для компонентов лимитируемого типа.

Если именуемый тип не имеет раздела дискриминантов, то одни и те же компоненты присутствуют во всех значениях этого типа. Если список компонентов именуемого типа определен зарезервированным словом null и раздел дискриминантов отсутствует, то именуемый тип не имеет компонентов, и все записи этого типа - пустые записи.

Предвыполнение определения именуемого типа создает именуемый тип; оно состоит из предвыполнения соответствующих (единичных) описаний компонентов в порядке их следования, включая описания компонентов в разделе вариантов. Предвыполнение описания компонента состоит из предвыполнения определения подтипа компонента.

Для предвыполнения определения подтипа компонента в случае, когда ограничение не зависит от дискриминанта (см. 3.7.1), предвыполняется указание подтипа. Если, с другой стороны, ограничение зависит от дискриминанта, то предвыполнение состоит из вычисления каждого входящего в ограничение выражения, которое не является дискриминантом.

Примеры описаний именуемого типа:

type ДАТА is

record

ДЕНЬ: INTEGER range 1..31;

МЕСЯЦ: ИМЯ_МЕСЯЦА;

ГОД: INTEGER range 0..4000;

end record;

type КОМПЛЕКСНЫЙ is

record

ВЕЩ: ВЕЩЕСТВ: = 0.0;

МНИМ: ВЕЩЕСТВ: =0.0;

end record;


Примеры переменных именуемого типа:

ЗАВТРА, ВЧЕРА: ДАТА;

А, В, С: КОМПЛЕКСНЫЙ;

- - компоненты А, В и С неявно инициализированы нулем.

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

В отличие от компонентов массива компоненты записи не обязательно имеют один и тот же тип.

3.7.1. Дискриминанты

Раздел дискриминантов специфицирует дискриминанты типа. Дискриминант записи - это компонент записи. Тип дискриминанта должен быть дискретным.

раздел_дискриминантов : : =

(спецификация_дискриминанта

{; спецификация_дискриминанта})

спецификация_дискриминанта : : =

список_идентификаторов : обозначение_типа

[: = выражение]


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

Спецификация дискриминанта с несколькими идентификаторами эквивалентна последовательности единичных спецификаций дискриминантов, как пояснено в разд.3.2. Каждая единичная спецификация дискриминанта описывает дискриминант. Если спецификация дискриминанта включает составной ограничитель присваивания, за которым следует выражение, то это - выражение по умолчанию для дискриминанта; выражения по умолчанию должны быть заданы либо для всех, либо не заданы ни для одного из дискриминантов раздела дискриминантов.

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