DEFINITION MODULE Aplicacion;

FROM Dominio IMPORT DOMINIO;
FROM Rango IMPORT RANGO;

TYPE APLICACION;
	

PROCEDURE Crear(): APLICACION;
PROCEDURE Destruir(VAR a: APLICACION);	

PROCEDURE EsVacia(a: APLICACION): BOOLEAN;
PROCEDURE Enlazado(a: APLICACION; d: DOMINIO): BOOLEAN;
PROCEDURE Extension(a: APLICACION): CARDINAL;
(* Pre: Enlazado(a,d) *)
PROCEDURE RangoDe(a: APLICACION; d: DOMINIO): RANGO;

(* Pre: NOT Enlazado(a,d) *)
PROCEDURE Enlazar(VAR a: APLICACION; d: DOMINIO; r: RANGO);
(* Pre: Enlazado(a,d) *)
PROCEDURE Desenlazar(VAR a: APLICACION; d: DOMINIO);

PROCEDURE Copiar(VAR a1: APLICACION; a2: APLICACION);

TYPE TIPO_OPERACION=PROCEDURE(DOMINIO, RANGO);
PROCEDURE Aplicar(a: APLICACION; op: TIPO_OPERACION);

TYPE TIPO_ERROR = <<a definir>>;

PROCEDURE Error():  TIPO_ERROR;

END Aplicacion.
