PROGRAMACIÓ ORIE TADA A OBJETOS TIPOS LIST Y SET Curso: 2011/12 Versión: 1.0.0 OBJETIVOS • • Profundizar en el uso de las interfaces List y Set. Profundizar en el uso del for extendido. OPERACIONES SOBRE LISTAS Y CONJUNTOS GenBank (http://www.ncbi.nlm.nih.gov/nuccore) es la base de datos de referencia para secuencias de genes. En ella se puede consultar información del gen relativa a su secuencia de nucleótidos, la función que desarrolla el gen, enfermedades con las que se le relaciona y publicaciones científicas que avalan esta información. GenBank es mantenida y actualizada por un consorcio formado por el Centro Nacional para Información Biotecnológica de EEUU (NCBI), el Instituto Europeo de Biología Molecular (EMBL) y el Banco de Datos de ADN de Japón (DDBJ). La información de GenBank reside en los servidores de NCBI y es actualizada diariamente con la información recibida en cada una de las otras dos instituciones del consorcio. EJERCICIO 1. TIPO GEN Cree el tipo gen, interfaz Gen y clase GenImpl de implementación, atendiendo a las siguientes definiciones: Gen Propiedades - Nombre, de tipo cadena de caracteres, consultable - Cromosoma, de tipo entero, consultable - Especie, de tipo cadena de caracteres, consultable - Nucleótidos, lista de caracteres, consultable Constructores: uno por defecto y otro que recibe nombre, cromosoma y especie Criterio de igualdad: dos genes son iguales si su nombre y su especie son iguales Representación como cadena: [Nombre, Especie] Implemente un método del tipo Gen que permita mutarlo, es decir, recibe una posición y un carácter y sustituye el nucleótido que ocupa esa posición. Además cree otro método que dado un entero, devuelva el nucleótido de esa posición. Lance y capture una excepción si no existe la posición dada. EJERCICIO 2. CLASE DE UTILIDAD GENBANK A continuación vamos a crear una clase de utilidad GenBank que contendrá una serie de métodos estáticos para la correcta actualización y sincronización de su contenido. Los métodos son los siguientes 1. Implemente el método actualiza que recibe tres parámetros: un conjunto de genes con los genes actualmente contenidos en GenBank, y dos conjuntos Tipos List y Set conteniendo los genes actualizados para EMBL y JJDB. El método devuelve el nuevo conjunto para GenBank actualizado con todos los nuevos genes reportados a cada uno de los miembros del consorcio. 2. Implemente el método repetidos que recibe tres conjuntos de genes, uno por cada miembro del consorcio, y devuelve un conjunto con aquellos genes que están repetidos en los tres conjuntos. 3. Implemente el método genesCromosoma que recibe el conjunto de genes de GenBank y un número de cromosoma y devuelve una lista con aquellos genes que pertenecen al cromosoma especificado. Tenga en cuenta que el protozoario Aulacantha, con 1600 cromosomas en sus células, es la especie con el mayor número de cromosomas, por lo que si se recibe un valor de cromosoma que no esté entre 1 y 1600 se debe lanzar una excepción CromosomaNoValidoExcepcion que deberá ser creada. 4. Implemente el método genesCromosomaPosicion que recibe la lista con genes creada en el apartado anterior, y un conjunto de genes, y devuelve un conjunto con las posiciones que ocupa cada uno de los genes del conjunto en la lista. Tenga en cuenta que para esto tendrá que consultar si el gen está contenido en la lista, y en caso de que así sea se buscará la posición que ocupa en la lista y se añadirá al conjunto que se devuelve. EJERCICIO 3 – DIFERENCIA SIMÉTRICA ENTRE DOS CONJUNTOS La diferencia simétrica de dos conjuntos A y B es otro conjunto C tal que cada elemento de C es elemento de A o de B, pero no de los dos. Escriba en una clase UtilesConjuntos el método estático diferenciaSimetrica que reciba dos Set<T> y devuelva su diferencia simétrica. EJERCICIO 4. REIMPLEMENTACION DE TIPOS YA CREADOS Vamos a reimplementar algunos de los tipos ya creados en las prácticas anteriores haciendo uso de listas y conjuntos. Los tipos Departamento y Hospital basaban su implementación en arrays. Reescriba tanto las interfaces como las clases usando listas. Tenga en cuenta que tendrá que cambiar la definición de atributos, constructores, y métodos de la clase. Para cada clase implemente además del constructor por parámetros uno por defecto. 2