Programación en Ada/Tipos limitados
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:
packagePilasistypeTPilaislimitedprivate;-- Tipo privado limitado.procedurePoner (P:inoutTPila; X:inInteger);procedureQuitar (P:inoutTPila; X:outInteger);function"=" (P1, P2: TPila)returnBoolean;privateMax:constant:= 100;typeTVectorEnterosisarray(Integerrange<>)ofInteger;typeTPilaisrecordP: TVectorEnteros(1..Max); Cima; Integerrange0..Max := 0;endrecord;endPilas;
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.