Universidad Carlos III de Madrid

Ingeniería de Telecomunicación

Enero-Mayo 2010 / January-May 2010

MÓDULO #1: Aplicaciones Orientadas a Objetos con Java


Introducción

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.

Clases y Herencia

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.

Ejemplo de clases

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.