Справочник по Ada 2005
3.3 Объекты и именованные числа
Объекты создаются во время выполнения и содержат значение заданного типа. Объект может быть создан и инициализирован как часть обработки объявления, вычисления аллокатора, агрегата или вызова_функции, или передачей параметра по значению. Перед освобождением памяти объекта, он финализируется, если необходимо (см. 7.6.1).
Статическая семантика
Все перечисленное ниже являются объектами:
- сущность, объявленная с помощью объявления_объекта;
- формальный параметр подпрограммы, входа или обобщенной подпрограммы;
- обобщенный формальный объект;
- параметр цикла;
- параметр выбора обработчика исключения;
- индекс входа тела входа entry_body;
- результат разыменования значения доступа к объекту (см. 4.1);
- объект результата, созданный в результате вычисления вызова_функции (или эквивалентного вызова оператора — см. 6.6);
- результат вычисления агрегата;
- компонент, срез или преобразование вида другого объекта.
Объект является либо постоянным объектом, либо переменным объектом. Значение постоянного объекта не может быть изменено между его инициализацией и финализацией, в то время как значение переменного объекта может быть изменено. Аналогично, представление объекта является либо постоянным, либо переменным. Все представления постоянного объекта являются постоянными. Постоянное представление переменного объекта не может быть использовано для изменения значения переменной. Термины постоянный и переменный сами по себе относятся к постоянному и переменном представлениям объектов.
Значение объекта считывается, когда вычисляется значение любой части объекта или когда вычисляется значение включающего объекта. Значение переменной обновляется, когда выполняется присваивание любой части переменной или когда выполняется присваивание включающему объекту.
Временный вид объекта определяется его определением как постоянного или переменного. Следующие (и только они) представляют константы:
- объект, объявленный с помощью объявления_объекта с ключевым словом constant;
- формальный параметр или обобщенный формальный объект режима in;
- дискриминант;
- параметр цикла, параметр выбора или индекс входа;
- разыменование значения доступа к константе;
- результат вычисления вызова_функции или агрегата;
- выбранный_компонент, индексированный_компонент, срез или преобразование вида константы.
В месте определения представления объекта ассоциируется номинальный подтип с представлением. Фактический подтип объекта (то есть его подтип) может быть более ограниченным, чем номинальный подтип представления; это всегда так, если номинальный подтип является неопределенным подтипом. Подтип является неопределенным, если это неограниченный подтип массива или если он имеет неизвестные дискриминанты или неограниченные дискриминанты без значений по умолчанию (см. 3.7); в противном случае подтип является определенным подтипом (все элементарные подтипы являются определенными подтипами). Подтип, охватывающий класс, определяется как имеющий неизвестные дискриминанты и, следовательно, является неопределенным подтипом. Неопределенный подтип сам по себе не содержит достаточной информации для создания объекта; необходим дополнительный ограничитель или явная инициализация выражения (см. 3.3.1). Компонент не может иметь неопределенный номинальный подтип.
Именованное число предоставляет имя для числового значения, известного во время компиляции. Оно объявляется с помощью объявления_числа.
ПРИМЕЧАНИЯ
5 Константа не может быть объектом целевого присваивания, ни передаваться как параметр in out или out между ее инициализацией и финализацией, если таковая имеется.
6 Номинальные и фактические подтипы элементарного объекта всегда одинаковы. Для дискриминированного или массивно-объектного, если номинальный подтип ограничен, то и фактический подтип ограничен.