Los subtipos se emplean para definir un subconjunto de un
tipo∞ determinado definido por una restricción.
Esta restricción puede ser un rango para un tipo escalar:
subtype∞ TDíaDelMes
is∞ Integer
range∞ 1..31;
subtype∞ TDíaFebrero
is∞ TDíaDelMes
range∞ 1..29;
subtype∞ TLaborable
is∞ TDíaDeSemana
range∞ Lunes..Viernes;
O una restricción en un array irrestringido:
type∞ TMatriz
is∞ array∞ (Positive range <>, Positive
range∞ <>)
of∞ Integer;
subtype∞ TMatriz10x10
is∞ TMatriz (1 .. 10, 1 .. 10);
O una restricción en el valor de un
registro discriminado∞:
type∞ TPersona (Sexo : TSexo)
is∞
record∞
Nombre : TNombre;
case∞ Sexo
is∞
when∞ Mujer => Embarazada : Boolean;
when∞ Hombre =>
null∞;
end∞ case∞;
end∞ record∞;
subtype∞ TMujer
is∞ TPersona (Sexo => Mujer);
Los subtipos de un mismo tipo base son totalmente compatibles entre sí, es decir no es necesaria una
conversión de tipos∞ para asignar objetos de subtipos distintos. Sin embargo, si en tiempo de ejecución se asigna un objeto a una variable y no se cumplen las restricciones del subtipo, se levantará la
excepción∞ Constraint_Error.
Manual de referencia de Ada