1 / 21

Genericidad

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.

evadne
Download Presentation

Genericidad

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 La clase Sectores encapsula una Tabla de componentes de tipo Robot, representada a través de un arreglo parcialmente ocupado. FabricaJuguetes Sectores Robot Caja Las búsquedas pueden hacerse por identidad o por equivalencia.

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

  4. Caso de Estudio: Parking 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

  5. Caso de Estudio: Robots 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

  6. 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 • 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

  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{ protectedObject[] T; //Constructor public Tabla(int max) { /*Crea una Tabla con capacidad para max elementos. */ T= new Object [max]; } … }

  9. //Comandos public void insertar (Objectelem) { /*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*/ inti = 0; while (T[i] != null) i++; T[i] = elem; } public void insertar (Objectelem, 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 booleanestaElemento (Objectelem){ /*Decide si la tabla mantiene un elemento con la misma identidad de elem, que asume no nulo*/ inti = 0; booleanesta = false; while (i < T.length && !esta ){ esta= T[i] == elem; i++; } return esta; } public ObjectrecuperarElemento (int p){ /*Requiere controlada la posición */ return T[p]; } public intcantOcupadas (){ //Retorna la cantidad de posicionesligadas inti = 0; int cant = 0; while (i < T.length){ if (T[i] != null) cant++; i++; } return cant; }

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

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

  13. class Estacionamientoextends Tabla{ … public booleanhayVencida (){ inti = 0; booleanhay = false; Micro m; while (i < T.length && !hay ){ if (T[i] != null){ m = (Micro) T[i]; hay = m.verificacionVencida(); } i++; } return hay; } public MicromenorKilometraje(){ inti = 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 Estacionamientos; … public Parking(){ s = new Estacionamiento(50); … } public void administrar (){ … intpos; … pos = 0; Micro r= new Micro (502); s.insertar(r,pos); … if (s.hayVencida()) … }

  15. class Sectoresextends Tabla{ public Sectores (int max){ super(max); } public intmenosEnergia (int m){ inti = 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 booleanestaElemento (Objectelem){ /*Decide si la tabla mantiene un elemento equivalente a elem, que asume no nulo*/ inti = 0; booleanesta = false; while (i < T.length && !esta){ if (T[i] != null) esta= T[i].equals(elem) ; i++; } return esta; }

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

  19. class Robot extendsTipoElemento{ … publicboolean mayor (TipoElementoe){ } … } abstractclassTipoElemento{ abstractpublicboolean mayor (TipoElementoe); } class Tabla{ protectedTipoElemento[] T; //Constructor public Tabla(int max) { /*Crea una Tabla con capacidad para max elementos. */ T= new TipoElemento[max]; } … }

  20. Genericidad Micro Robot *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.

More Related