ada
Tipos parametrizados
Buscar..
Introducción
Todos los tipos compuestos que no sean matrices pueden tener discriminantes, que son componentes con propiedades especiales. Los discriminantes pueden ser de un tipo discreto o un tipo de acceso. En este último caso, el tipo de acceso puede ser un tipo de acceso con nombre o puede ser anónimo. Un discriminante de un tipo de acceso anónimo se denomina discriminante de acceso por analogía con un parámetro de acceso.
Tipos de registros discriminados
En el caso de un tipo de registro discriminado, algunos de los componentes se conocen como discriminantes y los componentes restantes pueden depender de estos. Se puede pensar que los discriminantes parametrizan el tipo y la sintaxis revela esta analogía. En este ejemplo, creamos un tipo que proporciona una matriz cuadrada con un parámetro positivo:
type Square(X: Positive) is
record
S: Matrix(1 .. X, 1 .. X);
end record;
Luego, para crear un cuadrado de 3 por 3, simplemente llámalo de la siguiente forma:
Sq: Square(3);
Variante de estructuras de registro
Un discriminante de un tipo de registro puede influir en la estructura de los objetos. Puede existir una elección de componentes en un objeto, ya que un discriminante tenía un valor particular cuando se creó el objeto. Para admitir esta variación, la definición de un tipo de registro incluye una distinción por casos que depende del discriminante:
type Fruit is (Banana, Orange, Pear);
type Basket (Kind : Fruit) is
record
case Kind is
when Banana =>
Bunch_Size : Positive;
Bunches_Per_Box : Natural;
when Pear | Orange =>
Fruits_Per_Box : Natural;
end case;
end record;
A continuación, para crear una caja de plátanos,
Box : Basket (Banana);
El objeto Box ahora tiene dos componentes de registro además de su discriminante, Kind , a saber, Bunch_Size y Bunches_Per_Box .