IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería

Slides:



Advertisements
Presentaciones similares
Tipos de Datos Abstractos Vector de Racionales
Advertisements

Reusabilidad La productividad está basada en reusabilidad y extensibilidad El reusabilidad permite desarrollar nuevas aplicaciones a partir de componentes.
Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad.
El concepto de clase Con frecuencia un término puede definirse de diferentes maneras según el enfoque. Desde el punto de vista del análisis y el diseño.
Genericidad Los datos de aplicaciones muy diferentes puede modelarse con frecuencia a partir de tipos de datos cuyas operaciones no dependen del tipo de.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Genericidad.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Colección.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Polimorfismo.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Abstracción.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS GUI.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Tipo.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Herencia.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Abstracción.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Herencia.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Sonia.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Sonia.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Sonia.
Introducción a la Programación Orientada a Objetos Sonia Rueda Encapsulamiento y Abstracción Departamento de Ciencias e Ingeniería de la Computación UNIVERSIDAD.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Sonia.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
El celular en los parciales SI o NO
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
Diseño y Programación Orientada a Objetos
Sonia Rueda Herencia y Polimorfismo
Estructuras de datos y algoritmos
Listas Dinámicas.
IPOO 2 cuatrimestre 2016 Departamento de Ciencias e Ingeniería
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
IPOO 2 cuatrimestre 2015 Departamento de Ciencias e Ingeniería
PILAS Una pila es una estructura de datos o lista de elementos, a la cual se le puede insertar o eliminar su contenido sólo por uno de sus extremos, llamado.
IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería
IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería
Ordenamiento: Quick Sort
IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería
IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Transcripción de la presentación:

Introducción a la Programación Orientada a Objetos Sonia Rueda Genericidad IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería de la Computación UNIVERSIDAD NACIONAL DEL SUR 2018

Genericidad Los datos de aplicaciones muy diferentes con frecuencia pueden representarse con estructuras a las que se accede con operaciones que no dependen del tipo de las componentes. Una clase genérica encapsula a una estructura cuyo comportamiento es independiente del tipo de las componentes. La genericidad favorece la reusabilidad. IPOO 2 cuatrimestre 2018

Genericidad La clase Inventario encapsula una colección de componentes de tipo Articulo, representada a través de un arreglo parcialmente ocupado. Las componentes están comprimidas, de modo que si se almacenan cantArtículos, ocupan las primeras cantArticulos posiciones del arreglo. IPOO 2 cuatrimestre 2018 Inventario Artículo

Genericidad T [] Articulo codigo:entero cantArticulos:entero Inventario Articulo T [] Articulo cantArticulos:entero codigo:entero rubro:entero valor:real anio:entero << Constructores>> Inventario(max:entero) <<Comandos>> insertar (c:Articulo) eliminar (c:Articulo) depreciarRubro (r:entero,p:real) <<Consultas>> cantArticulos():entero estaLlena():entero pertenece (c:Articulo):boolean unAnio(a:entero):Inventario <<Constructor>> Articulo (c:entero,r:entero, v:entero,a:entero) <<Comandos>> depreciar(p:real) <<Consultas>> equals(a:Articulo ):boolean mayor(a:Articulo ):boolean

Genericidad Inventario(max:entero): crea una colección con capacidad para mantener max artículos. insertar (c:Articulo): asigna el artículo c a la primera posición libre e incrementa cantArtículos. Requiere c ligado y estaLlena()== false. eliminar (c:Articulo): busca un artículo equivalente a c, si existe, lo elimina arrastrando los que le siguen una posición y decrementando cantArtículos depreciarRubro (r:entero,p:real): recorre exahustivamente la colección y deprecia cada artículo del rubro r en el porcentaje p. cantArticulos():entero: retorna la cantidad de artículos almacenados en la colección estaLlena():booleano: retorna true si la cantidad de artículos es igual al tamaño de la colección pertenece (c:Articulo):boolean: retorna true si la colección contiene un elemento equivalente a c. unAnio(a:entero):Inventario: retorna una colección con los artículos que corresponden al año a en la colección que recibe el mensaje. IPOO 2 cuatrimestre 2018

Genericidad La clase Correo encapsula una colección de componentes de tipo Mensaje, representada a través de un arreglo parcialmente ocupado. Las componentes están comprimidas, de modo que si se almacenan cantMensajes, ocupan las primeras cantMensajes posiciones del arreglo. IPOO 2 cuatrimestre 2018 Correo Mensaje Fecha

Genericidad T [] Mensaje contacto:Contacto cantMensajes:entero Correo Mensaje T [] Mensaje cantMensajes:entero contacto:Contacto fecha:Fecha hora:Hora asunto : String contenido:String << Constructores>> Correo(max:entero) <<Comandos>> insertar (m:Mensaje) eliminar (m:Mensaje) <<Consultas>> cantMensajes():entero estaLlena():entero pertenece (m:Mensaje):boolean filtroAsunto(a:String):Correo <<Constructor>> … <<Comandos>> <<Consultas>> equals(m:Mensaje ):boolean mayor(m:Mensaje ):boolean

Genericidad Correo(max:entero): crea una colección con capacidad para mantener max mensajes. insertar (c:Mensaje): asigna el mensaje a la primera posición libre e incrementa cantMensajes. Requiere c ligado y estaLlena()== false. eliminar (c:Mensaje): busca un Mensaje equivalente a c, si existe, lo elimina arrastrando los que le siguen una posición y decrementando cantMensajes cantMensajes():entero: retorna la cantidad de Mensajes almacenados en la colección estaLlena():booleano: retorna true si la cantidad de Mensajes es igual al tamaño de la colección pertenece (c:Mensaje):boolean: retorna true si la colección contiene un elemento equivalente a c. filtroAsunto(a:String):Correo: retorna una colección con los mensajes que corresponden al asunto a en la colección que recibe el mensaje. IPOO 2 cuatrimestre 2018

Genericidad T [] Mensaje T [] Articulo cantMensajes:entero Correo Inventario T [] Mensaje cantMensajes:entero T [] Articulo cantArticulos:entero << Constructores>> Correo(max:entero) <<Comandos>> insertar (m:Mensaje) eliminar (m:Mensaje) <<Consultas>> cantMensajes():entero estaLlena():entero pertenece (m:Mensaje):boolean filtroAsunto(a:String):Correo << Constructores>> Inventario(max:entero) <<Comandos>> insertar (c:Articulo) eliminar (c:Articulo) depreciarRubro (r:entero,p:real) <<Consultas>> cantArticulos():entero estaLlena():entero pertenece (c:Articulo):boolean unAnio(a:entero):Inventario

Genericidad Correo Inventario T [] Mensaje cantMensajes:entero Correo(max:entero) T [] Articulo cantArticulos:entero Inventario(max:entero) Coleccion T [] Elemento cantElementos:entero Coleccion(max:entero) class Coleccion{ //atributos de instancia protected Elemento [] T; protected int cantElementos; //Constructor public Coleccion(int max){ T = new Elemento [max]; cantElementos = 0; } …}

Genericidad La clase Coleccion puede usarse para: T [] Elemento cantElementos:entero Coleccion(max:entero) La clase Coleccion puede usarse para: Crear objetos de clase Coleccion Definir clases especializadas que extiendan a Coleccion

Genericidad Correo Inventario insertar (m:Mensaje) eliminar (m:Mensaje) cantMensajes():entero estaLlena():entero pertenece (m:Mensaje):boolean filtroAsunto(a:String):Correo insertar (c:Articulo) eliminar (c:Articulo) depreciarRubro (r:entero,p:real) cantArticulos():entero estaLlena():entero pertenece (c:Articulo):boolean unAnio(a:entero):Inventario Coleccion insertar (c:Elemento) eliminar (c:Elemento) cantElementos():entero estaLlena():entero pertenece (c:Elemento):boolean Correo Inventario filtroAsunto(a:String):Correo depreciarRubro (r:entero,p:real) unAnio(a:entero):Inventario

Genericidad Colección(max:entero): crea una colección con capacidad para mantener max componentes insertar (c:Elemento): asigna el elemento c a la primera posición libre e incrementa cantElementos. Requiere c ligado y estaLlena()== false. eliminar (c:Elemento): busca un Elemento equivalente a c, si existe, lo elimina arrastrando los que le siguen una posición y decrementando cantElementos cantElementos():entero: retorna la cantidad de Elementos almacenados en la colección estaLlena():booleano: retorna true si la cantidad de Elementos es igual al tamaño de la colección pertenece (c:Elemento):boolean: retorna true si la colección contiene un elemento equivalente a c. IPOO 2 cuatrimestre 2018

Genericidad public void insertar (Mensaje m) { /*Inserta un mensaje en la primera posición libre. Requiere que la colección no esté llena y m no nulo*/ T[cantMensajes++] = m; } public void insertar (Articulo a) { /*Inserta un elemento en la primera posición libre. Requiere que la colección no esté llena y c no nulo*/ T[cantArticulos++] = c; } public void insertar (Elemento elem) { /*Inserta un elemento en la primera posición libre. Requiere que la colección no esté llena y elem no nulo*/ T[cantElementos++] = elem; }

Genericidad public int cantMensajes () { return cantMensajes; } public int cantArticulos() { return cantArticulos; } public int cantElementos() { return cantElementos; } La definición de este método genérico solo implica un cambio de nombre.

Genericidad public void eliminar ( Mensaje m){ /* Busca un mensaje equivalente a m en la colección, si lo encuentra arrastra los mensajes que siguen una posición. Requiere m ligado*/ boolean esta = false; int i= 0; while (!esta && i < cantMensajes() ) if (T[i].equals(m)) esta = true; else i++; if (esta) { cantMensajes--; arrastrar(i); }

Genericidad public void eliminar ( Articulo c){ /* Busca un articulo equivalente a c en la colección, si lo encuentra arrastra los articulos que siguen una posición. Requiere c ligado*/ boolean esta = false; int i= 0; while (!esta && i < cantArticulos() ) if (T [i].equals(c)) esta = true; else i++; if (esta) { cantArticulos--; arrastrar(i); }

Genericidad public void eliminar ( Elemento elem){ /* Busca un elemento equivalente a elem en la colección, si lo encuentra arrastra los elementos que siguen una posición. Requiere elem ligado*/ boolean esta = false; int i= 0; while (!esta && i < cantElementos() ) if (T [i].equals(elem)) esta = true; else i++; if (esta) { cantElementos--; arrastrar(i); } La ligadura dinámica vincula el mensaje equals con el método que corresponda, de acuerdo al tipo dinámico de la variable polimórfica T[i].

Genericidad *Elemento *equals (e:Elemento):boolean *mayor (e:Elemento):boolean Articulo Mensaje codigo:entero rubro:entero valor:real anio:entero contacto:Contacto fecha:Fecha hora:Hora asunto : String contenido:String <<Constructor>> … <<Comandos>> <<Consultas>> equals(e:Elemento ):boolean mayor(e:Elemento ):boolean <<Constructor>> … <<Comandos>> <<Consultas>> equals(e:Elemento ):boolean mayor(e:Elemento ):boolean

Genericidad En este caso también podríamos definir una interface. abstract class Elemento { abstract public boolean equals(Elemento e); abstract public boolean mayor(Elemento e); } interface Elemento { public boolean equals(Elemento e); public boolean mayor(Elemento e); } En este caso también podríamos definir una interface.

Genericidad abstract class Elemento { abstract public boolean equals(Elemento e); abstract public boolean mayor(Elemento e); } class Articulo extends Elemento { //Atributos de instancia … //Constructor //Comandos //Consultas public boolean equals(Elemento e){ …} public boolean mayor(Elemento e) { …}; }

Genericidad interface Elemento { public boolean equals(Elemento e); public boolean mayor(Elemento e); } class Articulo implements Elemento { //Atributos de instancia … //Constructor //Comandos //Consultas public boolean equals(Elemento e){ …} public boolean mayor(Elemento e) { …}; }

Genericidad class Mensajeria{ private Correo correo; public void gestionCorreo{ Correo correo = new Correo (n); Mensaje m = new Mensaje (…); … correo.insertar(m); } En la clase Mensajeria el objeto ligado a la variable correo siempre recibe el mensaje insertar con un parámetro de clase Mensaje. Un objeto de clase Correo puede recibir cualquiera de los mensajes que corresponden a servicios provistos por Coleccion.

Genericidad Las componentes de una instancia de Coleccion tienen tipo estático Elemento, lo cual asegura que están definidos los métodos equals y mayor. Coleccion insertar (c:Elemento) eliminar (c:Elemento) cantElementos():entero estaLlena():entero pertenece (c:Articulo):boolean Correo Inventario filtroAsunto(a:String):Correo depreciarRubro (r:entero,p:real) unAnio(a:entero):Inventario

Genericidad class Correo extends Coleccion { public Correo(int max){ super(max); } public Inventario FiltroAsunto ( String a){ /* Retorna una colección con los mensajes que corresponden al asunto a en la colección que recibe el mensaje. */ Correo cor= new Correo(cantElementos()); for (int i=0; i<cantElementos();i++){ Mensaje sms = (Mensaje) T[i]; if (sms.obtenerAsunto().equals(a)) cor.insertar(T[i]); } return cor; } } Podemos asegurar que el tipo dinámico de T[i] es Mensaje. En un objeto de clase Correo solo se insertan objetos de clase Mensaje.

Genericidad class Mensajeria{ private Correo correo; public void gestioCorreo{ correo = new Correo (n); Mensaje m = new Mensaje (…); … correo.insertar(m); String unAsunto = …; Correo otro = correo.filtrarAsunto (unAsunto); } Un objeto de clase Correo puede recibir cualquiera de los mensajes que corresponden a servicios provistos por su propia clase.

Genericidad *Elemento Coleccion *equals (e:Elemento):boolean *mayor (e:Elemento):boolean Colección(max:entero) insertar (c:Elemento) eliminar (c:Elemento) cantElementos():entero estaLlena():entero pertenece (c:Articulo):boolean SignosVitales umbralMax,umbralMin :entero maxima,minima :entero equals(e:Elemento ):boolean mayor(e:Elemento ):boolean alarma():boolean RegistroSignosVitales RegistroSignosVitales(max:entero) estable():boolean cantAlarmas():entero SVDiabetes umbralMaxG,umbralMinG :entero glucemia :entero equals(e:Elemento ):boolean mayor(e:Elemento ):boolean alarma():boolean

Genericidad class ControlPaciente{ private RegistroSignosVitales rs; public void procedimientoControl{ rs= new RegistroSignosVitales (40); SignosVitales mañana,tarde; mañana=new SVDiabetes(…); tarde=new SVDiabetes(…); … rs.insertar(mañana); rs.insertar(tarde); if (rs.cantAlarmas()>2) … } } En la clase ControlPaciente el objeto ligado a la variable rs siempre recibe el mensaje insertar con un parámetro que pertenece a la clase SignosVitales. La clase ControlPaciente es responsable de garantizar que se cumplen los requerimientos asumidos por las clases SignosVitales, SVDiabetes y RegistroSignosVitales.

Genericidad class RegistroSignosVitales extends Coleccion { public RegistroSignosVitales(int max){ super(max); } public boolean cantAlarmas(){ /* Computa la cantidad de registros que indican alarma en la temperatura, la presión o la glucemia en el caso de pacientes diabéticos a los que se les realiza esta medición*/ int cant=0; for (int i=0; i<cantElementos();i++){ SignosVitales sv= (SignosVitales) T[i]; if (sv.alarma()) cant++; } return cant; } Como solo insertamos objetos que pertenecen a la clase SignosVitales, podemos asegurar que T[i] mantiene una referencia a un objeto de clase SignosVitales .

Genericidad La clase Coleccion es genérica, permite factorizar el comportamiento compartido definiendo un patrón general. Las clases Correo, Inventario y RegistroSignosVitales extienden a Coleccion con servicios específicos. En un objeto de clase Correo solo tiene sentido insertar objetos de clase Mensaje. Si desde la clase Mensajeria por error se insertaran objetos de clase Articulo en un objeto de clase Correo, la ejecución del método filtrarAsunto, por ejemplo, provocaría un error. Si usamos instanceOf podemos prevenir la terminación anormal, pero el error persiste, porque se trata de un error en la aplicación.

Caso de Estudio: Colección Ordenada ColeccionOrdenada *Elemento T [] Elemento cant:entero <<Consultas>> *igual(c: Elemento):boolean *mayor(c: Elemento):boolean << Constructores>> ColeccionOrdenada(max:entero) <<Comandos>> insertar(c:Elemento) eliminar(c:Elemento) <<Consultas>> cantElementos():entero estaLlena():entero pertenece(c:Elemento):boolean intercala(l:ColeccionOrdenada): ColeccionOrdenada

Caso de Estudio: Colección Ordenada ColecciónOrdenada(max:entero) crea una colección con capacidad para mantener max componentes insertar (c:Elemento): boolean Busca la posición de inserción de c, de modo tal que todos los elementos que ocupen las posiciones anteriores sean menores a c y los elementos que siguen a la posición sean mayores a c. Si c no está ligada o estaLlena() es false no modifica el estado interno y retorna false eliminar (c:Elemento) busca un Elemento equivalente a c, si existe, lo elimina arrastrando los que le siguen una posición y decrementacantElementos cantElementos():entero retorna la cantidad de Elementos almacenados en la colección estaLlena():entero retorna true si la cantidad de Elementos es igual al tamaño de la colección pertenece (c:Elemento):boolean retorna true si la colección contiene un elemento equivalente a c. intercala(c:ColeccionOrdenada):ColeccionOrdenada Genera una nueva colección ordenada intercalando la colección que recibe el mensaje con la que pasa como parámetro.

Caso de Estudio: Colección Ordenada El servicio insertar tiene que funcionar considerando varios casos diferentes: La colección está vacía el elemento es: Menor a todos Mayor a todos Mayor al primero pero Menor que el último

Caso de Estudio: Colección Ordenada Algoritmo insertar DE c Buscar la posición del primer elemento mayor a c Arrastrar todos los elementos a partir de posición Asignar c a la posición Incrementar la cantidad de elementos

Caso de Estudio: Colección Ordenada public boolean insertar(Elemento c){ /*Busca la posición de inserción de c, de modo tal que todos los elementos que ocupen las posiciones anteriores sean menores a c y los elementos que siguen a la posición sean mayores a c. Si c no está ligada o estaLlena() es false no modifica el estado interno y retorna false */ boolean inserto = true; if (c==null || estaLlena()) inserto = false; else{ int pos = posInsercion(nc,cant); arrastrarDsp (pos,cant-pos); T[pos] = c; cant++; } return inserto;}

Caso de Estudio: Colección Ordenada Caso trivial: Si la cantidad de elementos es 0, la posición de inserción es 0 Caso trivial: Si c es mayor que el último nombre, la posición es la última Caso Recursivo: buscar la posición de inserción entre las n-1 componentes private int posInsercion (Elemento c,int n){ /* Retornar la posición del primer elemento mayor a c, o 0 si no existe*/ int pos = 0; if (n > 0) if (c.mayor(T[n-1]) pos = n; else pos = posInsercion (c,--n); return pos; }

Caso de Estudio: Colección Ordenada private void arrastrarDsp (int pos,int n){ if (n > 0){ T[pos+n] = T[pos+n-1]; arrastrarDsp(pos,--n); }

Caso de Estudio: Colección Ordenada El servicio eliminar tiene que funcionar considerando varios casos diferentes: La colección está vacía el elemento: No pertenece a la colección Es el primero Es el último Es Mayor al primero pero Menor que el último

Caso de Estudio: Colección Ordenada Algoritmo eliminar DE c Buscar la posición del c Si existe Arrastrar los elementos desde posición hasta el último Decrementar la cantidad de elementos public void eliminar(Elemento c){ /*Elimina, si existe, el elemento c */ int pos = posElemento (c,cantElementos); if (pos > -1){ arrastrarAnt(pos,cantElementos -pos-1); cant--; }

Caso de Estudio: Colección Ordenada public int posElemento (int c, int ini,int fin){ /*Retorna la posición de c usando búsqueda binaria. Si c no pertenece a la colección retorna -1 */ int pos = -1; return pos; }

Caso de Estudio: Colección Ordenada La búsqueda binaria requiere que la estructura esté ordenada y consiste en partirla en mitades, considerando que el elemento buscado puede ser: Introducción a la Programación Orientada a Objetos •igual al que está en el medio •menor que el que está en el medio mayor que el que está en el medio

Caso de Estudio: Colección Ordenada public int posElemento (Elemento c, int ini,int fin){ /*Retorna la posición de c usando búsqueda binaria. Si c no pertenece a la colección retorna -1 */ int pos = -1; int mitad= (int) (ini+fin)/2 ; if (c.igual(T[mitad])) pos = mitad; else if (ini < fin) if (c.mayor(T[mitad])) pos = posElemento (c,mitad+1,fin); else pos = posElemento (c,ini,mitad-1); return pos; }

Caso de Estudio: Colección Ordenada Algoritmo Intercalar crear una colección ordenada Nueva i1  0 i2  0 k  0 mientras i1 < n1 y i2 < n2 si L1i1 es menor que L2i2 insertar L1i1 en Nuevak i1++ k++ sino insertar L2i2 en Nuevak i2++ k++ si i1 < n1 Insertar el resto de L1i1 sino Insertar el resto de L2i2 Introducción a la Programación Orientada a Objetos ¿Qué ocurre si un elemento pertenece a las dos estructuras?

Genericidad Estamos modelando genericidad usando herencia. En las materias que siguen se presenta un mecanismo para definir clases genéricas a partir de polimorfismo paramétrico. Java brinda recursos limitados para soportar este concepto.