Ir al contenido

Programación en Ada/Tipos

De Wikilibros, la colección de libros de texto de contenido libre.
← Elementos del lenguaje Tipos Tipos/Enteros →


Clasificación de tipos

[editar]
Jerarquía de tipos en Ada

Los tipos de Ada se pueden clasificar en:

  • Compuesto:
    • Vector: Arrays, Strings.
    • Registros: record.

Declaración de tipos

[editar]

Para definir un tipo no estándar, se puede emplear el siguiente esquema:

declaración_tipo ::= type identificador is definición_tipo ;

Sirvan como ejemplos las siguientes definiciones de tipos:

-- Escalares discretos no estándar:
-- 
type TIndice is range 1..50;

-- Escalares reales no estándar:
-- 
type TPeso is digits 10;  -- Coma flotante con precisión de 10 cifras.
type TMasa is delta 0.01 range -12.0 .. 12.0; -- Coma fija 0.01 precis.

-- Enumeración:
-- 
type TColor is (ROJO, VERDE, AZUL);

-- Vectores:
-- 
type TMatriz is array (1..10, 1..10) of Float;
type TVector5 is array (TIndice range 5..10) of Float;
 
-- Registros:
-- 
type TVálvula is
  record
    Nombre: String(1..20);
    Abierta: Boolean;
    VelocidadLíquido: Float range 0.0 .. 30.0;
  end record;

-- Punteros:
-- 
type PEntero is 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 TVectorIndef is array (Integer range <>) 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).

Manual de referencia de Ada

[editar]