Описание переменных и преобразование типов
В отличие от других объектно-ориентированных языков программирования, Ада не использует каких либо специальных конструкторов, поэтому объекты (иначе переменные) тэговых типов могут быть описаны обычным образом.
Инициализация индивидуальных полей может быть выполнена отдельно или с помощью агрегатов. Например:
declare
Instance_1 : Object_1; Instance_2 : Object_2; Instance_3 : Object_3; begin Instance_1.Field_1 := 1; Instance_2 := ( 1, 2 ); Instance_3 := ( Field_1 => 1, Field_2 => 2, Field_3 => 3 ); . . . end; |
Ада позволяет выполнять явное преобразование типов при преобразовании типа потомка к типу предка (снизу-вверх). Так, используя приведенные в предыдущем примере описания, можно выполнить следующие преобразования:
. . . Instance_1 := Object_1 (Instance_3); Instance_2 := Object_2 (Instance_3); . . . |
При таком преобразовании типов значение дополнительных полей потомка просто отбрасываются.
Кроме того, допускается выполнение преобразования типов от предка к потомку (сверху-вниз).
Этот случай несколько сложнее, поскольку потомок может содержать дополнительные поля, которые отсутствуют у типа предка.
В таких случаях используются расширяющие агрегаты, например:
. . . Instance_2 := (Instance_1 with 2); Instance_3 := (Instance_1 with Field_2 => 2, Field_3 => 3); . . . |
Следует заметить, что клиентские программы не часто используют эти средства, поскольку тэговые типы, как правило, описываются как приватные типы.