Universidad Carlos III de Madrid

Ingeniería de Telecomunicación

Enero-Mayo 2010 / January-May 2010

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


Introducción

En este segundo módulo practicaremos con listas, pilas y colas.

Listas con memoria dinámica

En este segundo módulo utilizaremos estructuras más complejas para almacenar la información de la aplicación, añadiendo los métodos necesarios para poder gestionar estas estructuras.

En este módulo tienes que:

  • Escribir una clase contenedora derivada de la clase abstracta del módulo 1, que almacene los objetos en una lista enlazada de objetos.

  • Añadir a esta clase contenedora los métodos siguientes:

  • Escribir las siguientes clases derivadas de esta clase contenedora:

    • Una clase que implemente un comportamiento de pila, es decir, estrategia LIFO, con los métodos habituales.

    • Otra clase que implemente un comportamiento de cola, es decir, estrategia FIFO, con los métodos habituales.

    • Una clase que implemente un comportamiento de pila con prioridad, ordenando los elementos según el criterio definido por el método compareTo.

    • Una clase que implemente un comportamiento de cola con prioridad, ordenando los elementos según el criterio definido por el método compareTo.

  • Incluye un método en la clase de la aplicación para comparar dos contenedores de objetos, en el orden interno que tenga cada uno, que se pasen por parámetro. El criterio de comparación de objetos es el definido por compareTo y el parámetro a devolver como resultado de la evaluación lo decides tú.

  • Modifica la clase de la aplicación del módulo anterior para validar el código desarrollado en este módulo.

Ejemplo de clases

Así, en nuestra aplicación de ejemplo, tendríamos una nueva clase CardDeckList que implementa el mazo guardado como una lista enlazada, y contendría los métodos añadidos requeridos. Además tendríamos las cuatro clases derivadas:

Además, la clase Game tendría un método nuevo int play(CardDeck player1, CardDeck player2) que compara carta a carta de cada mazo y suma 1 si gana el jugador 1 o -1 si gana el jugador 2. El resultado final es positivo si globalmente gana el mazo del jugador 1, negativo si gana el del jugador 2, o 0 en caso de empate. El método lanza una excepción GameException si el número de cartas no es el mismo en ambas barajas.