Описание переменных и преобразование типов
Описание переменных и преобразование типов
В отличие от других объектно-ориентированных языков программирования, Ада не использует каких либо специальных конструкторов, поэтому объекты (иначе переменные) тэговых типов могут быть описаны обычным образом.Инициализация индивидуальных полей может быть выполнена отдельно или с помощью агрегатов. Например:
declare
Instance_1 : Object_1;
Instance_2 : Object_2;
Instance_3 : Object_3;
begin
Instance_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); . . . |
Следует заметить, что клиентские программы не часто используют эти средства, поскольку тэговые типы, как правило, описываются как приватные типы.