Universidad de los Andes Ingeniería de Sistemas y Computación Algorítmica y Programación por Objetos 2 Ejercicio Nivel 7 CupiHuracanes Descripción global El centro nacional de huracanes de los Estados Unidos es el organismo encargado de nombrar, predecir y monitorear el comportamiento de los huracanes que se presentan cada año en la costa del Atlántico Norte y la costa Californiana. Esta organización necesita una aplicación que le permita registrar los huracanes que se presentan cada año. Objetivos El objetivo de este ejercicio es que el estudiante comprenda y adquiera práctica en: Conceptos vistos en el curso anterior (Mundo e Interfaz). Desarrollará una aplicación siguiendo un proceso incremental. Construirá los invariantes de las clases del mundo del ejercicio. Utilizará la instrucción assert de Java para verificar invariantes. Desarrollará pruebas unitarias en Junit para las clases del ejercicio. Entenderá y aplicará el concepto de comparación de objetos. Entenderá y desarrollará tres algoritmos de ordenamiento (burbuja, inserción y selección). Entenderá y desarrollará algoritmos de búsqueda binaria y secuencial sobre una lista ordenada o no ordenada. Aprenderá a representar un objeto como un texto con el método toString(). Utilizará JList y JScrollPane para presentar listas en la interfaz gráfica. Los siguientes pasos conforman el plan sugerido para desarrollar el ejercicio. La idea es ir desarrollando y probando incrementalmente los métodos de las clases. No se preocupe si las clases de la interfaz o de las pruebas (test) tienen errores. Estos desaparecerán cuando termine (correctamente) los cambios en el modelo del mundo. Este ejercicio debe ser realizado de manera INDIVIDUAL. Preparación 1. Descargue del sitio web del curso el archivo demo de la aplicación (del enlace llamado n7_cupiHuracanes_demo) y ejecútelo para conocer el funcionamiento esperado del programa. 2. Descargue del sitio web del curso el esqueleto del ejercicio (del enlace llamado n7_cupiHuracanes_esqueleto) del ejercicio del sitio del curso. Descomprima este archivo e importe el proyecto llamado n7_cupiHuracanes en Eclipse. 3. Lea el enunciado del problema disponible en: n7_cupiHuracanes/docs/specs/Descripcion.pdf. 4. Estudie el documento de requerimientos funcionales disponible en: n7_cupiHuracanes/docs/specs/RequerimientosFuncionales.pdf. 5. Estudie el modelo del mundo diseñado para este ejercicio. Este modelo se encuentra en: n7_cupiHuracanes/docs/specs/ModeloConceptual.jpg. Identifique las clases, relaciones entre clases, constantes, atributos y métodos 6. Asegúrese de tener activado el uso de aserciones para la ejecución del programa. Ver el tutorial en: http://cupi2.uniandes.edu.co/sitio/images/cursosCupi2/apo2/tutoriales/n7_assert .pdf Parte1: Construcción de invariantes 1. Complete la clase Huracan a. Defina el invariante de esta clase y documéntelo en la cabecera de la clase, siguiendo las normas explicadas para ello. b. Cree al final de la clase Huracan el método private void verificarInvariante() y utilice aserciones para validar el invariante que definió en el punto anterior. c. Utilice (invoque) el método verificarInvariante() para verificar el invariante en todos aquellos métodos de la clase que modifican el estado. 2. Complete la clase SistemaHuracanes a. Defina el invariante de esta clase y documéntelo en la cabecera de la clase, siguiendo las normas explicadas para ello. b. Cree al final de la clase SistemaHuracanes el método private void verificarInvariante() y utilice aserciones para validar el invariante que definió en el punto anterior. c. Utilice (invoque) el método verificarInvariante() para verificar el invariante en todos aquellos métodos de la clase que modifican el estado. Parte2: Comparaciones, ordenamiento y búsqueda 1. Complete la clase Huracan: Complete los métodos de comparación de la clase Huracan. Utilice el método compareTo de la clase String para comparar cadenas de caracteres (puede usar compareToIgnoreCase para no diferenciar mayúsculas y minúsculas), o la expresión “mayor que” o “menor que” para comparar números. Estos métodos son: o compararPorNombre o compararPorDanios o compararPorVelocidad Implemente en la clase de pruebas HuracanTest los métodos de prueba para verificar el correcto funcionamiento de los métodos desarrollados en el punto anterior. Verifique que al ejecutar la clase de prueba HuracanTest, los casos de prueba se ejecutan sin errores. 2. Complete la clase SistemaHuracanes con ordenamientos: Complete el método ordenarPorNombre, que ordena los huracanes según su nombre ascendentemente, utilizando el algoritmo de burbuja. Complete el método ordenarPorVelocidad, que ordena los huracanes descendentemente según su velocidad, utilizando el algoritmo de inserción. Complete el método ordenarPorDanios, que ordena los huracanes según los daños causados ascendentemente, utilizando el algoritmo de selección. 3. Complete la clase SistemaHuracanes con las búsquedas: Complete el método buscarBinarioPorNombre, que busca un huracán a partir de su nombre utilizando una búsqueda binaria. Recuerde que la precondición de la búsqueda binaria es que el conjunto en donde se busca esté ordenado. Complete el método buscarHuracanMayorCostoDanios, que busca el huracán que haya causado la mayor cantidad de daños y retorna su posición. Complete el método buscarHuracanMenorCostoDanios, que busca el huracán que haya causado la menor cantidad de daños y retorna su posición. Complete el método buscarHuracanMayorVelocidad, que busca el huracán que tenga la mayor velocidad de los vientos y retorna su posición. Implemente en la clase de pruebas SistemaHuracanesTest los métodos de prueba para verificar el correcto funcionamiento de los 4 métodos de búsqueda desarrollados anteriormente. Verifique que al ejecutar la clase de prueba SistemaHuracanesTest, los casos de prueba se ejecutan sin errores. Parte3: Creación de listas en la interfaz 1. Complete el método toString() de la clase Huracan para que retorne una cadena de caracteres con el nombre del huracán. 2. Complete la clase PanelListaHuracanes: Cree el atributo listaHuracanes de tipo JList En el método constructor: i. Inicialice la lista ii. Inicialice el atributo de tipo JScrollPane de tal manera que incluya la lista anterior. Complete el método refrescarLista, que actualiza el JList con el contenido de la lista que entra como parámetro. Recuerde primero borrar los elementos de la lista actual, segundo agregar los nuevos elementos (entran como parámetro), y tercero establecer el índice seleccionado en el 0. Cree el método public void valueChanged(ListSelectionEvent e) el cual actualiza la información del panel de información de los huracanes, según el nuevo huracán que se seleccionó. Para esto utilice el método actualizarInformacionHuracan(Huracan)de la ventana principal. Validación Para comprobar el funcionamiento de su ejercicio, usted puede: Ejecutar las pruebas disponibles en el ejercicio (validación funcional del mundo). Ejecutar el programa e interactuar con todas las opciones disponibles en la interfaz (validación completa mundo + interfaz del programa).
© Copyright 2024