Guía mínima de Ada 95 |
Un paquete se divide generalmente en dos partes: especificación e implementación (body). Ambas partes se sitúan casi siempre en ficheros diferentes, con las extensiones "*.ads" y "*.adb", respectivamente.
La estructura de la especificación de un package es la siguiente:
package nombre_de_la_unidad
is
--declaraciones
private
--declaraciones
privadas
end nombre_de_la_unidad;
Las declaraciones que aparecen antes de la palabra "private" constituyen la parte visible, o interfaz, del paquete. Las que aparecen después son privadas; no obstante, la parte privada es opcional, y si no aparece la palabra "private" se entiende que el paquete no tiene parte privada.
Las declaraciones pueden ser desde declaraciones de tipos hasta prototipos de procedimientos o funciones. Un prototipo de un procedimiento o función es su cabecera, pero cambiando la palabra "is" por un punto y coma (";"), lo que indica que el subprograma se desarrollará más tarde (en la implementación del paquete).
La declaración de un paquete requiere una implementación si hay declaraciones que requieran completarse (por ejemplo, el prototipo de una función requiere su desarrollo). La estructura de un "package body" es:
package body nombre_de_la_unidad
is
--desarrollo
del package
end nombre_de_la_unidad;
Todas las declaraciones hechas en la especificación del paquete se pueden usar en la implementación (body), aunque estén en la parte "private". Las declaraciones hechas en el "package body" sólo se pueden usar en el mismo.
package Manejo_De_Claves
is
type
Clave is private;
Clavenula
: constant Clave;
procedure
Tomar_Clave(C : out Clave);
function
"<"(X, Y : in Clave) return Boolean;
private
Max :
constant
:= 2 ** 16 - 1;
type
Clave is range 0 .. Max;
Clavenula
: constant Clave := 0;
end Manejo_De_Claves;
Huelga decir que el paquete Manejo_De_Claves necesita un "package body" para completar su definición.
package body Manejo_De_Claves
is
procedure Tomar_Clave(C
: out Clave) is
begin
-- Cuerpo del procedimiento
end Tomar_Clave;
function "<"(X,
Y : in Clave) return Boolean is
begin
-- Cuerpo del operador
end "<";
end
Manejo_De_Claves;
Si además se
quiere deshabilitar las operaciones de asignación y comparación
de igualdad/desigualdad, habrá que declarar el tipo como "limited
private".