PROGRAMACIÓN ORIENTADA A OBJETOS BOLETIN 5: CRITERIOS DE ORDENACION Curso: 2011/12 Versión: 1.0.0 OBJETIVOS Profundizar en el diseño de tipos. Trabajar con criterios de ordenación: natural y adicional. Ejercicio 1: Criterio de orden natural Paciente y Medico Criterio de orden natural: en ambos casos el criterio de orden natural entre dos objetos de tipo Paciente o Medico, será el establecido por apellidos, nombre y DNI. Es decir, el establecido en el tipo Persona. ¿Debe realizar algún cambio? Gen Criterio de orden natural: el criterio de orden natural entre dos objetos de tipo Gen es el establecido por el orden alfabético de sus nombres. En caso de igualdad de nombres se ordenará alfabéticamente por el nombre de las especies a las que pertenecen. Realice los cambios que estime oportuno en la interfaz Gen y en la clase GenImpl. Realice una clase Test con el nombre TestBoletin5 en donde se declare e inicialice varios objetos de tipo Gen; y se muestre por pantalla el resultado de comparar según el criterio de orden natural dichos objetos. Ejercicio 2: Criterio de orden adicional Gen Añada dos criterios de orden alternativo para objetos de tipo Gen: Según el cromosoma donde se ubique dicho gen. Según el número de nucleótidos. Ejercicio 3: SortedSet En la clase TestSortedSet realice los siguientes pasos: a. Copie el siguiente código tras el método principal o método main de la clase TestSortedSet. Este código se supone que construye el repositorio de genes que constituye GenBank. public static List<Gen> construyeGenBank(){ Gen g1 = new GenImpl("BDH1", 5, "Homo Sapiens"); Gen g2 = new GenImpl("LGALS8", 5, "Homo Sapiens"); Gen g3 = new GenImpl("PAOX", 5, "Homo Sapiens"); Gen g4 = new GenImpl("ZNF324B", 1, "Homo Sapiens"); Gen g5 = new GenImpl("LYZL4", 0, "Homo Sapiens"); List<Gen> res = new ArrayList<Gen>(); res.add(g1); res.add(g2); res.add(g3); res.add(g4); res.add(g5); return res; } Boletín 5: Criterios de ordenación b. En el método principal invoque el método construyeGenBank y asigne su resultado a un objeto previamente declarado. c. Muestre por pantalla la lista de genes creada. d. Vuelque el contenido de la lista en un conjunto ordenado, de manera, que los genes queden almacenados en dicho conjunto según el nombre. Es decir, siguiendo el criterio de orden natural. ¿Cómo realiza esta operación? Una opción es recorriendo uno a uno los elementos de la lista y añadiéndolos al conjunto. ¿Se le ocurre otra opción? Piense en el constructor a partir de otro objeto de tipo Collection. e. Muestre el conjunto obtenido y observe cómo está ordenado. f. Cree un conjunto ordenado según aparición en el cromosoma. g. Muestre el conjunto ordenado según el cromosoma en donde se encuentra dicho Gen. ¿Qué observa? Según cómo esté implementado el comparador, el conjunto ordenado según el cromosoma donde se encuentra el gen aparecerán menos genes de los esperados. ¿Cómo solucionaría este punto? h. Modifique el comparador de objetos de tipo Gen según el cromosoma en que se encuentra el gen para evitar esta problemática. Para ello, en caso de estar los genes parámetro de entrada en el mismo cromosoma desempate según el orden natural de dichos genes. i. Haga el comparador por número de nucleótidos anterior consistente con la igualdad. (size) Ejercicio 4: Clase de utilidad para genes El objetivo de este ejercicio es crear métodos estáticos en una clase utilidad de nombre Genes. Como trabajo previo, realice un constructor que nos facilite la construcción de objetos de tipo Gen, para ello el constructor recibirá una cadena de caracteres para inicializar la cadena de nucleótidos (a partir de la cadena construya la lista) además del nombre, número de cromosoma y nombre de la especie. Cree una clase de utilidad para el tipo Gen, de forma que usando métodos del tipo List y la clase Collections, responda a las siguientes cuestiones: a. Dado un conjunto de genes, devuelva el Gen de menor número de nucleótidos. b. Dados un gen y dos caracteres, sustituya en los nucleótidos del gen un carácter por el otro. c. Dado un gen y un entero n devuelve una cadena con los últimos n nucleótidos. d. Dado un gen y un nucleótido devuelve el número de veces que está presente en el gen. e. Dado un gen y una cadena de caracteres s devuelve la posición de los nucleótidos donde aparece s por primera vez. f. Dado un gen intercambiar la primera y última posición de su lista de nucleótidos. Realice una clase TestGenes en donde se compruebe la corrección de los métodos anteriores. 2 Boletín 5: Criterios de ordenación Ejercicio 5: Clases genéricas Cree el siguiente tipo: Intervalo: de tipo T que es Comparable<T>. Propiedades: - Límite superior: de tipo T, consultable. - Límite inferior: de tipo T, consultable. Métodos: - Método de nombre esInterior, que dado un objeto de tipo T devuelve cierto si el objeto se encuentra dentro del intervalo. - Método de nombre estaIncluido, que dado un objeto de tipo Intervalo<T> devuelve el valor de verdadero si el intervalo de entrada está incluido en el intervalo que invoca el método. Criterio de igualdad: dos intervalos serán iguales si tienen los mismos valores para los límites inferiores y superiores. Representación como cadena: la representación del valor de un objeto de tipo Intervalo será “[limite_inferior, limite_superior]”. Representación como un número entero: coherente con el criterio de igualdad, es decir, basado en su límite inferior y superior. En la clase que implemente la interfaz, el constructor lanzará la excepción IllegalArgumentException si el límite inferior tiene un valor mayor al límite superior. Finalmente, cree una clase con nombre TestIntervalo donde se instancie el tipo y se muestre en consola el resultado de invocar sus métodos. 3