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

3.3 Объекты и именованные числа

Объекты создаются во время выполнения и содержат значение заданного типа. Объект может быть создан и инициализирован в рамках разработки объявления, вычисления аллокатора, агрегата или вызова_функции, или переданы в качестве параметра по значению. Перед освобождением памяти объекта, он окончательно завершается, если это необходимо (см. 7.6.1).

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

Все перечисленное ниже являются объектами:
  • сущность, объявленная в объявлении_объекта;
  • формальный параметр подпрограммы, входа или обобщенной подпрограммы;
  • обобщенный формальный объект;
  • параметр цикла;
  • параметр выбора обработчика исключения;
  • индекс входа в тело_входа;
  • результат разыменования значения доступа к объекту (см. 4.1);
  • объект-результат функции;
  • результат вычисления агрегата;
  • квалифицированное_выражение, операнд которого обозначает объект;
  • компонент, срез или преобразование вида другого объекта.
Объект является либо постоянным объектом, либо переменным объектом. Аналогично, вид объекта является либо постоянным, либо переменным. Все представления постоянного элементарного объекта являются постоянными. Все представления постоянного составного объекта являются постоянными, за исключением частей, которые имеют контролируемые или неизменяемые ограниченные типы; переменные представления этих частей и их подкомпонентов могут существовать. В этом смысле объекты контролируемых и неизменяемых ограниченных типов являются внутренне изменяемыми. Постоянное представление объекта не может быть использовано для изменения его значения. Термины постоянный и переменный сами по себе относятся к постоянным и переменным представлениям объектов.
Значение объекта читается, когда вычисляется значение любой части объекта или когда вычисляется значение содержащего объекта. Значение переменной обновляется, когда выполняется присваивание любой части переменной или когда выполняется присваивание содержащему объекту.
Является ли представление объекта постоянным или переменным определяется определением представления. Следующие (и только они) представляют собой константы:
  • объект, объявленный с помощью объявления_объекта с ключевым словом constant;
  • формальный параметр или обобщенный формальный объект в режиме in;
  • дискриминант;
  • параметр цикла, если не указано, что он является переменной для обобщенного цикла (см. 5.5.2);
  • параметр выбора или индекс входа;
  • разыменование значения доступа к константе;
  • объект-результат, объявленный в расширенном_операторе_возврата с ключевым словом constant;
  • объект, обозначаемый вызовом_функции или агрегатом;
  • результат вычисления квалифицированного_выражения;
  • внутри тела защищенной функции (или функции, объявленной непосредственно внутри тела_защищенного_блока), текущий экземпляр содержащего защищенного блока;
  • выбранный_компонент, индексированный_компонент, срез или преобразование вида константы.
В месте определения представления объекта с представлением объекта связывается номинальный тип. Фактический тип объекта (то есть его тип) может быть более ограничен, чем номинальный тип представления; это всегда так, если номинальный тип является неопределенным типом. Тип является неопределенным типом, если он является неограниченным типом массива или если он имеет неизвестные дискриминанты или неограниченные дискриминанты без значений по умолчанию (см. 3.7); в противном случае тип является определенным типом (все элементарные типы являются определенными типами). Класс-типовой тип определяется как имеющий неизвестные дискриминанты и поэтому является неопределенным типом. Неопределенный тип сам по себе не содержит достаточной информации для создания объекта; необходимо дополнительное ограничение или явная инициализация выражение (см. 3.3.1). Компонент не может иметь неопределенный номинальный тип.
Представление составного объекта известно как ограниченное, если:
  • его номинальный тип ограничен и не является неопознанным частичным представлением; или
  • его номинальный тип неопределен; или
  • его тип неизменяемо ограничен (см. 7.5); или
  • он является частью самостоятельной константы (включая обобщенный формальный объект в режиме in); или
  • он является частью формального параметра в режиме in; или
  • он является частью объекта, обозначаемого вызовом_функции или агрегатом; или
  • он является частью постоянного объекта-результата расширенного_оператора_возврата; или
  • он является разыменованием типа доступа, специфичного для пула, и нет предка его типа, имеющего ограниченное частичное представление.
Для определения в теле обобщения, ограничен ли объект:
  • если тип является потомком неопознанного обобщенного формального частного или производного типа, и тип не является неограниченным типом массива, он не считается неопределенным и считается имеющим ограниченное частичное представление;
  • если тип является потомком формального типа доступа, он не считается специфичным для пула.
Именованное число предоставляет имя для числового значения, известного на этапе компиляции. Оно объявляется в объявлении_числа.
ПРИМЕЧАНИЯ
10 Константа не может быть целью операции присваивания, ни передаваться в качестве параметра in out или out между ее инициализацией и завершением, если таковые имеются.
11 Значение постоянного объекта не может быть изменено после его инициализации, за исключением некоторых случаев, когда объект имеет контролируемую или неизменяемо ограниченную часть (см. 7.5, 7.6 и 13.9.1).
12 Номинальные и фактические типы элементарного объекта всегда одинаковы. Для дискриминированного или массивнового объекта, если номинальный тип ограничен, то ограничен и фактический тип.


Spec-Zone.ru

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