2.9. Tipos Abstractos de Datos • • • • • Ventajas de los lenguajes de alto nivel: programador no se preocupa de la representación física de los datos. ADT (Abstract data type) es una ampliación: un modulo dará nombre a un nuevo tipo y define las operaciones que pueden ser aplicadas. La especificación y su cuerpo se compilan por separado. La estructura debe estar oculta, debe ir en el cuerpo. Ejemplo de cola en ADA Package ModCola is Type Cola is limited private; -- Solo se pueden aplicar sobre el tipo subprogramas definidos en este paquete Procedure Crear (Q:in out Cola); Function vacia (Q: cola) return boolean; Procedure Insertar (Q:in out Cola; E: Elemento); Procedure Eliminar (Q:in out Cola; E:out Elemento); Private Type Nodocola; Type Colaptr is access Nodocola; Type Nodcola is Record Contenido: Elemento; Siguiente: Colaptr; End record; Type cola is Record Frente: Colaptr; Final: Colaptr; End record; End Modcola; Package body Modcola is ---------end ModCola; Tema 2. Programación de STR 33 Programación orientada a objetos • Los TAD carecen de 4 propiedades que los harían adecuados para la POO: o Herencia o Inicialización automática de objetos o Finalización " " " o Selección de operaciones en tiempo de ejecución. • En el ejemplo de la cola hay que declarar una variable colas y después llamar al procedimiento de inicialización. En POO esto es automático. • Ejemplo de Cola en Java: Import algunpaquete.Elemento // importar elemento Package colas; // nombre del paquete Class NodoCola (( clase local { Elemento dato; NodoCola siguiente; } public class Cola // Clase accesible desde fuera del paquete { NodoCola frente, final; // variables de instancia Public Cola() // Constructor público { frente = null; final = null; } public void insetar (Elemento E) // método visible { NodoCola nodonuevo = new NodoCOla(); NodoNuevo.dato = e; NodoNuevo.siguiente = null; If (vacia()) { Frente = nodoNuevo; } else { final.siguiente = nodoNuevo; } final =nodoNuevo; } } If (vacia()) { Elemento ImpE = frente.dato; Frente = Frente.siguiente ; If (vacia()) final = null; Tema 2. Programación de STR 34 Java y Herencia o Se obtiene derivando unas clases de otras. o Ejemplo de coordenadas Package coordenadas; Public class Coordenadas { float X; float Y; public coordenadas }(float X_ini, float Y_ini) // constructor { X = X_ini; Y = Y_ini; } public void establedcer(float F1, float F2); { X = f1; Y = F2; } public float obtenerX(); { return X, } public float obtenerY(); { return Y; } ///////////////////////////////////////////////////////////////////////// package coordenadas; public class 3dimensiones extends Coordenadas;// Indica la clase base float Z; // nuevo campo public 3dimensiones(float Xini, float Yini, float Zini) // constructor { super (Xini, Yini) // llamada al constructor de la superclase Z = Zini; } public void establecer(float F1, float F2, float F3) // metodo redefinido { establecer(F1, F2) // llamada a establecer de la superclase Z = F3; } public float obtener() // nuevo método { return Z; }; }; Tema 2. Programación de STR 35