Programación en Ada/Tipos
Clasificación de tipos
[editar]Los tipos de Ada se pueden clasificar en:
- Escalar:
- Discreto:
- Enteros: Integer, Natural, Positive.
- Enumeraciones: Boolean, Character.
- Real:
- Discreto:
Declaración de tipos
[editar]Para definir un tipo no estándar, se puede emplear el siguiente esquema:
declaración_tipo ::=type
identificadoris
definición_tipo ;
Sirvan como ejemplos las siguientes definiciones de tipos:
-- Escalares discretos no estándar:
--
type
TIndiceis
range
1..50;-- Escalares reales no estándar:
--
type
TPesois
digits
10;-- Coma flotante con precisión de 10 cifras.
type
TMasais
delta
0.01range
-12.0 .. 12.0;-- Coma fija 0.01 precis.
-- Enumeración:
--
type
TColoris
(ROJO, VERDE, AZUL);-- Vectores:
--
type
TMatrizis
array
(1..10, 1..10)of
Float;type
TVector5is
array
(TIndicerange
5..10)of
Float;-- Registros:
--
type
TVálvulais
record
Nombre: String(1..20); Abierta: Boolean; VelocidadLíquido: Floatrange
0.0 .. 30.0;end
record
;-- Punteros:
--
type
PEnterois
access
Integer;
-- Arrays irrestringidos. Tienen un número indefinido de
-- elementos. Es necesario especificar los límites al declarar
-- variables de ese tipo.
--
declare
type
TVectorIndefis
array
(Integerrange
<>)of
Float; V: TVectorIndef (1..4);begin
V(1) := 10.28; V := (1.2, 1.5, 1.8, 1.3); V := (1 => 1.2, 2 => 1.7,others
=> 0.0);end
;
Algunos atributos aplicables a tipos
[editar]Los atributos son operaciones predefinidas que se pueden aplicar a tipos, objetos y otras entidades. Por ejemplo estos son algunos atributos aplicables a tipos:
- Last: Integer'Last es el máximo valor que puede tomar la variable de tipo Integer. También es el último valor de un tipo enumerado o del índice de un vector.
- First: Integer'First es el mínimo valor que puede tomar la variable de tipo Integer. También es el primer valor de un tipo enumerado o del índice de un vector.
- Range: Vector'Range indica el rango que ocupa la variable Vector, es decir, equivale a Vector'First..Vector'Last. En el caso de más de una dimensión, el valor Matriz'Range(1) indica el rango de la primera dimensión.
- Succ: TColor'Succ(ROJO) indica el siguiente valor a ROJO que toma el tipo TColor, si no existe, se eleva la excepción Constraint_Error.
- Pred: TDía'Pred(VIERNES) indica el anterior valor a VIERNES que toma el tipo TDía, si no existe, se eleva la excepción Constraint_Error.
- Pos: El atributo Pos indica la posición ocupada por un determinado valor en un tipo enumeración. Por ejemplo: TColor'Pos(ROJO). La primera posición se considera 0.
- Val: El atributo Val indica el valor que ocupa una determinada posición en un tipo enumeración. Por ejemplo: COLOR'Val(1).
- Para identificar unívocamente un valor de un tipo enumeración se emplea TColor' (ROJO) y TIndicador'(ROJO) para distinguir el valor ROJO del tipo TColor o TIndicador.
Subtipos
[editar]Los subtipos definen un subconjunto de los valores de un tipo determinado, pero no son un tipo distinto de su tipo base.
Superar una ambigüedad
[editar]En el supuesto caso de que se quiera superar una ambigüedad en el tipo de una variable (debería evitarse) en un determinado instante, se puede optar por convertirlo (no recomendable) o cualificarlo:
- Convertir el tipo, por ejemplo: Integer(I) convierte el número I a entero.
- Cualificar el tipo, por ejemplo: Integer'(I) interpreta I como entero.
En ambos casos, el resultado es I como entero.
La cualificación sirve para cuando un literal no se sabe a qué tipo pertenece y se le indica de ese modo. Por ejemplo:
...
type Color is (Rojo, Azul, Naranja);
type Fruta is (Naranja, Pera, Melon);
procedure Put (Una_Fruta : Fruta);
procedure Put (Un_Color : Color);
...
begin
Put (Color'(Naranja)); -- Llama a procedure Put (Un_Color : Color)
Put (Fruta'(Naranja)); -- Llama a procedure Put(Una_Fruta : Fruta)
Put (Naranja); -- Error de sintaxis, la llamada es ambigua
Put (Rojo); -- Ok, llama a procedure Put (Un_Color : Color)
end;
Tipos avanzados
[editar]Hay otros tipos más avanzados en Ada. Puedes optar por leer estos tipos ahora o por continuar el libro por la siguiente lección Objetos (variables y constantes).
- Registros discriminados
- Registros variantes
- Punteros a objetos
- Punteros a subprogramas
- Tipos derivados
- Tipos etiquetados