Ejercicio Nivel 7 CupiHuracanes - Cupi2

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).