La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Genericidad Los datos de aplicaciones muy diferentes puede modelarse con frecuencia a partir de tipos de datos cuyas operaciones no dependen del tipo de.

Presentaciones similares


Presentación del tema: "Genericidad Los datos de aplicaciones muy diferentes puede modelarse con frecuencia a partir de tipos de datos cuyas operaciones no dependen del tipo de."— Transcripción de la presentación:

1 Genericidad Los datos de aplicaciones muy diferentes puede modelarse con frecuencia a partir de tipos de datos cuyas operaciones no dependen del tipo de las componentes. En la materia Estructuras de Datos este tema será protagónico, en ella definirán los TDA Pila, Cola, Árbol que luego tendrán un gran número de aplicaciones modelando los datos de problemas de la vida real. La genericidad puede modelarse en Java de dos maneras diferentes: usando tipos de datos parametrizados o usando herencia. En esta materia definiremos clases genéricas usando herencia.

2 Genericidad Robot Sectores Caja La clase Sectores encapsula una Tabla de componentes de tipo Robot, representada a través de un arreglo parcialmente ocupado. FabricaJuguetes Las búsquedas pueden hacerse por identidad o por equivalencia.

3 Introducción a la Programación Orientada a Objetos Micro Estacionamiento Parking La clase Estacionamiento encapsula una tabla de elementos de tipo Micro, representada a través de un arreglo parcialmente ocupado. Caso de Estudio: Concesionaria Las búsquedas pueden hacerse por identidad o por equivalencia.

4 La clase Estacionamiento define un TDA que encapsula una tabla de elementos de tipo Micro y brinda operaciones para: Estacionar un Micro en una unidad dada Estacionar un Micro en la primera unidad libre Retirar el Micro de una unidad dada Decidir si un micro dado está estacionado en alguna unidad del estacionamiento Recuperar el Micro que está en una unidad dada Calcular cuántas unidades están ocupadas Decidir si hay algún Micro con la verificación vencida Retornar el Micro con menor kilometraje Caso de Estudio: Parking

5 La clase Sectores define un TDA que encapsula una tabla de elementos de tipo Robot y brinda operaciones para: Asignar un Robot a un sector dado Asignar un Robot al primer sector libre Desasignar el Robot de un sector dado Decidir si un robot dado está asignado a algún sector Recuperar el Robot que está en un sector dado Calcular cuántos sectores están ocupados Calcular cuántos robots tienen menos de m unidades de energía Caso de Estudio: Robots

6 Asignar un Robot a un sector dado Asignar un Robot al primer sector libre Desasignar el Robot de un sector dado Decidir si un robot dado está asignado a algún sector Recuperar el Robot que está en un sector dado Calcular cuántos sectores están ocupados Calcular cuántos robots tienen menos de m unidades de energía Estacionar un Micro en una unidad dada Estacionar un Micro en la primera unidad libre Retirar el Micro de una unidad dada Decidir si un micro dado está estacionado en alguna unidad del estacionamiento Recuperar el Micro que está en una unidad dada Calcular cuántas unidades están ocupadas Decidir si hay algún Micro con la verificación vencida Retornar el Micro con menor kilometraje, si hay varios retornar el primero

7 Insertar un ELEMENTO en una POSICION dada Insertar un ELEMENTO en la primera POSICION libre Eliminar el ELEMENTO de una POSICION dada Decidir si un ELEMENTO está en alguna POSICION Recuperar el ELEMENTO que está en una POSICION dada Calcular cuántas POSICIONES están ligadas

8 class Tabla { protected Object[] T; //Constructor public Tabla (int max) { /*Crea una Tabla con capacidad para max elementos. */ T= new Object [max]; } … }

9 //Comandos public void insertar (Object elem) { /*Busca la primera posición libre e inserta La clase Cliente es responsable de controlar que la tabla no esté llena y elem no sea nulo*/ int i = 0; while (T[i] != null) i++; T[i] = elem; } public void insertar (Object elem, int p) { /*Inserta un elemento en la posición p, requiere controlada la posición y elem no nulo*/ T[p] = elem; } public void eliminar (int p){ /*Requiere controlada la posición */ T[p] = null; }

10 //Consultas public boolean estaElemento (Object elem){ /*Decide si la tabla mantiene un elemento con la misma identidad de elem, que asume no nulo*/ int i = 0; boolean esta = false; while (i < T.length && !esta ){ esta = T[i] == elem ; i++; } return esta; } public Object recuperarElemento (int p){ /*Requiere controlada la posición */ return T[p]; } public int cantOcupadas (){ //Retorna la cantidad de posiciones ligadas int i = 0; int cant = 0; while (i < T.length){ if (T[i] != null) cant++; i++; } return cant; }

11 Genericidad Sectores Tabla Sectores Servicios generales Servicios específicos Estacionamiento Servicios específicos

12 class Estacionamiento extends Tabla { public Estacionamiento (int m){ super (m); }

13 class Estacionamiento extends Tabla { … public boolean hayVencida (){ int i = 0; boolean hay = false; Micro m; while (i < T.length && !hay ){ if (T[i] != null){ m = (Micro) T[i]; hay = m.verificacionVencida(); } i++; } return hay; } public Micro menorKilometraje (){ int i = 1; Micro menor = (Micro) T[0]; Micro m; while (i < T.length){ if (T[i] != null){ m = (Micro) T[i]; if (m.obtenerKm() < menor.obtenerKm()) menor = m; } i++; } return menor; } }

14 class Parking { private Estacionamiento s; … public Parking(){ s = new Estacionamiento(50); … } public void administrar (){ … int pos; … pos = 0; Micro r= new Micro (502); s.insertar (r,pos); … if (s.hayVencida()) … }

15 class Sectores extends Tabla { public Sectores (int max){ super(max); } public int menosEnergia (int m){ int i = 0; Robot r;int cant=0; while (i < T.length){ if (T[i] != null){ r = (Robot) T[i]; if (r.obtenerEnergia()<m) cant++; } i++; } return cant; } }

16 Decidir si alguna POSICION contiene un ELEMENTO equivalente a uno dado Decidir si todos los ELEMENTOS son mayores a uno dado.

17 //Consultas public boolean estaElemento (Object elem){ /*Decide si la tabla mantiene un elemento equivalente a elem, que asume no nulo*/ int i = 0; boolean esta = false; while (i < T.length && !esta ){ if (T[i] != null) esta = T[i].equals(elem) ; i++; } return esta; }

18 public boolean todosMayores (Object elem){ /*Decide si todos los elementos son mayores a elem*/ int i = 0; boolean son = true; while (i < T.length && son){ if (T[i] != null) son = T[i].mayor(elem) ; i++; } return son; } public boolean todosMayores (TipoElemento elem){ /*Decide si todos los elementos son mayores a elem*/ int i = 0; boolean son = true; while (i < T.length && son){ if (T[i] != null) son = T[i].mayor(elem) ; i++; } return son; }

19 class Robot extends TipoElemento{ … public boolean mayor (TipoElemento e){ } … } abstract class TipoElemento{ abstract public boolean mayor (TipoElemento e); } class Tabla { protected TipoElemento[] T; //Constructor public Tabla (int max) { /*Crea una Tabla con capacidad para max elementos. */ T= new TipoElemento[max]; } … }

20 Genericidad Robot Micro * TipoElemento Tabla Sectores Estacionamiento

21 Genericidad Observaciones Las clases Tabla, Estacionamiento y Sectores NO son abstractas. La clase genérica es la Tabla. Las componentes de la clase genérica pueden ser de clase Object cuando solo se usan los métodos abstractos de Object Si un método de la clase abstracta se debe redefinir en una clase concreta, la signatura tiene que ser exactamente la misma.


Descargar ppt "Genericidad Los datos de aplicaciones muy diferentes puede modelarse con frecuencia a partir de tipos de datos cuyas operaciones no dependen del tipo de."

Presentaciones similares


Anuncios Google