Programación en Ada/Tipos limitados

← Tipos abstractos de datos Tipos limitados Unidades genéricas →


Tipos privados limitados

editar

Cuando se define un tipo privado, se predefinen inherentemente las operaciones de asignación, igualdad y desigualdad. Si no se quiere que exista ninguna operación, sino únicamente las definidas en el paquete, se debe emplear el tipo privado limitado.

Como consecuencia de no tener operador de asignación, la declaración de un objeto de dicho tipo no puede incluir un valor inicial. Esto también tiene la consecuencia de que no pueden existir constantes de un tipo privado limitado.

La ventaja es que el programador de la unidad que contenga un tipo privado limitado se asegura el control absoluto sobre los objetos de dicho tipo.

Para indicarlo, se define el tipo como limited private. Por ejemplo, implementado un tipo abstracto de datos pila:

package Pilas is
  type TPila is limited private;  -- Tipo privado limitado.
  procedure Poner (P: in out TPila; X: in Integer);
  procedure Quitar (P: in out TPila; X: out Integer);
  function "=" (P1, P2: TPila) return Boolean;
private
  Max: constant := 100;
  type TVectorEnteros is array (Integer range <>) of Integer;
  type TPila is
    record
      P: TVectorEnteros(1..Max);
      Cima; Integer range 0..Max := 0;
    end record;
end Pilas;

La función "=" se implementa para comprobar que dos pilas tienen el mismo número de elementos y cada uno de ellos en el mismo orden deber ser iguales. Por eso, se ha optado por un tipo privado limitado.

Manual de referencia de Ada

editar