Ahora que ya tienes afianzados los conceptos básicos de la Programación Orientada a Objetos, es un buen momento para llevar a cabo algunas modificaciones que afectan al modelo diseñado ya que hay conceptos avanzados de la Programación Orientada a Objetos que aún no han sido vistos en las unidades anteriores y que deberían ser aplicados. Por tal motivo, en este cuarto spring se van a llevar a cabo una serie de modificaciones con las que se pretende mejorar el diseño de clases implementado hasta ahora.
Para ello te muestro un diagrama de clases para el mismo y poco a poco te iré explicando los diferentes pasos a realizar:
- Lo primero que debes hacer es realizar un fork del repositorio donde he colocado el esqueleto de este proyecto.
- Clona tu repositorio remoto recién copiado en GitHub a un repositorio local que será donde irás realizando lo que a continuación se te pide.
- Modifica el archivo
README.md
para que incluya tu nombre en el apartado "Alumno". Realiza tu primer commit.
- Actualiza el Enum
Tipo Habitacion
para que se ajuste a lo indicado en el diagrama de clases. - Realiza el commit correspondiente.
- Elimina de la clase el atributo
tipoHabitacion
ya que la claseHabitacion
será ahora una clase abstracta, tal y como se indica en el diagrama de clases. - Haz los cambios necesarios en los constructores de la clase para ajustarlos al diagrama de clases.
- Declara el método abstracto
getNumeroMaximoPersonas
cuyo valor dependerá de la habitación que se vaya a crear (Suite, Simple, Doble Triple). - Implementa la clase
Simple
como se muestra en el diagrama. Haz uso desuper
siempre que sea posible.- Implementa adecuadamente el método
getNumeroMaximoPersonas
deberá devolver el valor almacenado en la constanteNUM_MAXIMO_PERSONAS
(1). - Implementa el método
toString
para que la información de salida se corresponda con la exigida en el test.
- Implementa adecuadamente el método
- Implementa la clase
Doble
como se muestra en el diagrama. Haz uso desuper
siempre que sea posible.- Implementa adecuadamente el método
getNumeroMaximoPersonas
que deberá devolver el valor almacenado en la constanteNUM_MAXIMO_PERSONAS
(2). - Añade los atributos y los métodos
getters
ysetters
que aparecen en el diagrama de clases. Los dos atributos propios de la clase almacenarán el número de camas individuales y de camas dobles que hay en la habitación. Dado que es una habitación para dos personas, este tipo de habitaciones tendrá, o bien dos camas individuales o bien una sola cama doble, lo cual será comprobado a través del métodovalidaNumCamas
. Usa las constantes que aparecen en el diagrama asignándole el valor adecuado. - Implementa el método
toString
para que la información de salida se corresponda con la exigida en el test.
- Implementa adecuadamente el método
- Implementa la clase
Triple
como se muestra en el diagrama. Haz uso desuper
siempre que sea posible.- Implementa adecuadamente el método
getNumeroMaximoPersonas
que deberá devolver el valor almacenado en la constanteNUM_MAXIMO_PERSONAS
(3). - Añade los atributos y los métodos
getters
ysetters
que aparecen en el diagrama de clases. Los tres atributos propios de la clase almacenarán el número de baños de los que dispone la habitación, y el número de camas individuales y de camas dobles que hay en la habitación. Dado que es una habitación para tres personas, este tipo de habitaciones tendrá, o bien dos camas individuales y una doble o bien tres camas individuales, lo cual será comprobado a través del métodovalidaNumCamas
. Usa las constantes que aparecen en el diagrama asignándole el valor adecuado. - Implementa el método
toString
para que la información de salida se corresponda con la exigida en el test.
- Implementa adecuadamente el método
- Implementa la clase
Suite
como se muestra en el diagrama. Haz uso desuper
siempre que sea posible.- Implementa adecuadamente el método
getNumeroMaximoPersonas
que deberá devolver el valor almacenado en la constanteNUM_MAXIMO_PERSONAS
(4). - Añade los atributos y los métodos
getters
ysetters
que aparecen en el diagrama de clases. Los dos atributos propios de la clase almacenarán el número de baños de los que dispone la habitación, y si tiene o no jacuzzi. Usa las constantes que aparecen en el diagrama asignándole el valor adecuado. - Implementa el método
toString
para que la información de salida se corresponda con la exigida en el test.
- Implementa adecuadamente el método
- Modifica todos aquellos métodos de la clase
Habitación
que deban ser actualizados debido a la aplicación de la herencia. - Realiza el commit correspondiente.
- Reimplementa los métodos
getHabitacion
ysetHabitacion
de la claseReserva
ya que deberá devolverse una habitación u otra en función de la instancia de la habitación. - Modifica todos aquellos métodos de la clase
Reserva
que deban ser actualizados debido a la aplicación de la herencia en la claseHabitacion
. - Realiza el commit correspondiente.
- Reimplementa todos los métodos de las clases pertenecientes al paquete negocio que se hayan visto afectadas por incluir la herencia en la clase
Habitacion
. - Las tres clases que tenía este paquete en la versión anterior deberán ser movidas al paquete memoria.
- Crea en el paquete negocio las tres interfaces que se muestran en el diagrama de clases.
- Modifica las clases del paquete memoria para que implementen la Interfaz que le corresponda.
- Realiza el commit correspondiente.
- Modifica la clase
Modelo
para que se ajuste a lo mostrado en el diagrama de clases. - Realiza el commit correspondiente.
- Modifica la clase
Controlador
para que se ajuste a lo mostrado en el diagrama de clases. - Realiza el commit correspondiente.
- Modifica el método
leerHabitación
que en función del tipo de habitación que elija el usuario deberá crear la instancia de la habitación (Simple
,Doble
,Triple
oSuite
) correspondiente a la opción elegida. - Realiza el commit correspondiente.
- Modifica la clase
Vista
y añade los métodos:mostrarReservasHuesped
que pedirá los datos del huesped (getHuespedPorDni
) y llamará al métodolistarReservas
de un huésped para que muestre todas las reservas de dicho huésped.mostrarReservasTipoHabitación
que pedirá los datos de la habitación (leerHabitacionPorIdentificador
) y llamará al métodolistarReservas
de un tipo de habitación para que muestre las reservas de dicho tipo de habitación.comprobarDisponibilidad
que pedirá todos los datos necesarios para llamar al métodoconsultarDisponibilidad
. Tras la respuesta de este método, mostrará por consola los datos de la habitación solicitada si hay disponibilidad, o un mensaje indicando que el tipo de habitación solicitado no está disponible.- Realiza todos los cambios adicionales que sean necesarios para que la clase se ajuste a lo mostrado en el diagrama de clases.
- Realiza el commit correspondiente.
- Modifica el enum
Opcion
teniendo en cuenta lo siguiente:- Añade un atributo estático de tipo
Vista
. - Implementa el método
setVista
tal y como aparece en el diagrama de clases y que deberá ser llamado desde el constructor de la claseVista
. - Añade el método abstracto
ejecutar
, que deberá ser implementado en cada instancia del enumOpcion
, llamando al método que le corresponda de la claseVista
. Con esto se pretende que cada opción no solo contenga el mensaje que debe mostrarse por pantalla, sino también, el método de la claseVista
que debe ser ejecutado cuando el usuario de la aplicación elija dicha opción.
- Añade un atributo estático de tipo
- Realiza el commit corresopndiente.
- Finalmente, realiza el push hacia tu repositorio remoto en GitHub.
- La indentación debe ser correcta en cada uno de los apartados.
- El nombre de las variables debe ser adecuado.
- Se debe utilizar la clase
Entrada
para realizar la entrada por teclado. - El programa debe pasar todas las pruebas que van en el esqueleto del proyecto y toda entrada del programa será validada, para evitar que el programa termine abruptamente debido a una excepción. Además, que ni decir tiene, el programa no debe contener ningún error léxico, sintáctico, de dependencias, etc.
- La corrección ortográfica tanto en los comentarios como en los mensajes que se muestren al usuario.