Tal y como se dice en la introducción, el objetivo del proyecto es aprender a diseñar y desarrollar una aplicación completa utilizando correctamente el paradigma de la orientación a objetos en Java.
En este primer módulo practicaremos: herencia, arrays y excepciones.
El primer paso al enfrentarse con cualquier aplicación es el diseño del modelo de datos. En el ámbito en el que te encuentras consiste en el diseño de las clases que formarán tu programa.
En este módulo tienes que implementar la jerarquía de clases que va a modelar la información manejada en tu aplicación, cumpliendo una serie de requisitos.
Los requisitos que se piden son:
La jerarquía debe tener al menos 3 niveles de profundidad, con al menos 8 clases en total.
Las clases deben tener atributos de al menos 3 tipos diferentes (String, booleanos, numéricos, otros).
Los atributos deben tener sus correspondientes métodos de acceso.
La clase raíz de la jerarquía debe definir un método equals
y otro
compareTo
que permita comparar y ordenar los objetos. Dado que tendrá
el método compareTo
, haz que la clase implemente la interfaz Comparable
.
Escribir una clase abstracta contenedora de objetos de otras clases, con los siguientes métodos (algunos son abstractos y otros no, decide tú cuál será de cada tipo):
Implementar una clase contenedora derivada de la anterior, que realice una implementación basada en un array de objetos.
Debes escribir una clase derivada de Exception
(llámala como quieras), para
ser lanzada por todos los métodos anteriores que puedan dar error.
Todas las clases deben incluir un método toString()
que devuelva la representación del objeto como cadena, para facilitar su impresión en pantalla o fichero.
Debes tener una clase global de la aplicación, que pruebe todos los métodos anteriores.
En nuestra aplicación de ejemplo, tendríamos la siguiente jerarquía de clases:
La clase Card
y derivadas representarían una carta del juego. Cada carta tiene su
personaje, color, fuerza, etc. El método compareTo
sirve para ordenarlas por fuerza y
luego por tipo.
La clase CardDeck
abstracta representa el mazo de cartas de un jugador.
Su clase derivada CardDeckArray
implementa el mazo de cartas como un array, así que,
además del nombre de dicho jugador, contiene como atributo un array de Card
.
Los métodos readFromFile
y writeToFile
leen y escriben a un fichero en
formato texto separado por tabuladores, donde la primera columna es la clase del objeto y luego están
los valores de los diferentes atributos de las clases.
La clase Game
es la clase de la aplicación, que en este primer módulo crea una serie de
mazos con diferentes cartas para evaluar el código desarrollado.
La clase GameException
es la clase que representa la excepción que puede lanzar los
diferentes constructores y métodos de todas las clases.