Spec-Zone.ru › Ada 2012
Справочник по Ada 2012

12.4 Формальные объекты

Формальный объект обобщения может использоваться для передачи значения или переменной в обобщенную единицу.

Синтаксис

formal_object_declaration ::=
список_идентификаторов_определения : режим [исключение_нулевого_значения] метка_подтипа [:= выражение_по_умолчанию]
[спецификация_аспекта];
| список_идентификаторов_определения : режим определение_доступа [:= выражение_по_умолчанию]
[спецификация_аспекта];

Правила разрешения имен

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

Правила законности

Если у формального объекта обобщения есть выражение_по_умолчанию, то режим должен быть вход (явный или по умолчанию); в противном случае режим должен быть вход или вход-выход.
Для формального объекта обобщения с режимом вход фактический должен быть выражением. Для формального объекта обобщения с режимом вход-выход фактический должен быть именем, обозначающим переменную, для которой разрешено переименование (см. 8.5.1).
В случае, когда тип формального объекта определен определением_доступа, тип фактического и тип формального:
  • должны оба быть типами доступа к объекту со статически соответствующими обозначенными подтипами и при этом оба или ни один из них не являются типами доступа к константе; или
  • должны оба быть типами доступа к подпрограммам с подтипосогласованными обозначенными профилями.
Для формального_объекта_объявления с исключение_нулевого_значения или определением_доступа, имеющим исключение_нулевого_значения:
  • если фактический, соответствующий формальному_объекту_объявления, обозначает формальный объект обобщения другой обобщенной единицы G, и инстанциация, содержащая фактический, встречается внутри тела G или внутри тела обобщенной единицы, объявленной в области объявления G, то объявление формального объекта G должно иметь исключение_нулевого_значения;
  • в противном случае, подтип фактического, соответствующего формальному_объекту_объявления, должен исключать нуль. В дополнение к местам, где обычно применяются правила законности (см. 12.3), это правило применяется также в закрытой части экземпляра обобщенной единицы.

Статическая семантика

формальное_объявление_объекта объявляет формальный объект обобщения. Режим по умолчанию — вход. Для формального объекта с режимом вход номинальный подтип — это подтип, обозначаемый меткой_подтипа или определением_доступа в объявлении формального объекта. Для формального объекта с режимом вход-выход его тип определяется меткой_подтипа или определением_доступа в объявлении; его номинальный подтип нестатичен, даже если метка_подтипа обозначает статический подтип; для составного типа его номинальный подтип не ограничен, если первый подтип типа не ограничен, даже если метка_подтипа обозначает ограниченный подтип.
В экземпляре, формальное_объявление_объекта с режимом вход — это полное объявление константы и объявляет новый самостоятельный константный объект, инициализируемое выражение которого — фактический, в то время как формальное_объявление_объекта с режимом вход-выход объявляет представление, свойства которого идентичны свойствам фактического.

Динамическая семантика

Для оценки ассоциации_обобщения для формального объекта с режимом вход создается константный объект, значение фактического параметра преобразуется в номинальный подтип формального объекта и присваивается объекту, включая любые корректировки значения — см. 7.6.
ПРИМЕЧАНИЯ
6 Ограничения, которые применяются к формальному объекту обобщения с режимом вход-выход, — это ограничения соответствующего фактического параметра обобщения (а не те, которые подразумеваются меткой_подтипа, которая появляется в формальном_объекте_объявления). Поэтому, чтобы избежать путаницы, рекомендуется использовать имя первого подтипа для объявления такого формального объекта.


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API