Universidad Carlos III de Madrid

Ingeniería de Telecomunicación

Enero-Mayo 2010 / January-May 2010

Proyecto


Introducción

El objetivo principal de esta práctica es que aprendas a diseñar y desarrollar una aplicación completa, utilizando el paradigma de la programación orientada a objetos, en Java.

La práctica va a estar dividida en tres módulos. Cada uno de estos módulos hará énfasis en cada uno de los principales bloques conceptuales del curso:

M1: herencia, arrays, excepciones

Tendrás que diseñar un conjunto de clases que se relacionarán entre sí mediante herencia y composición. Dichas clases contendrán la funcionalidad básica a usar en el resto de la aplicación.

M2: listas, pilas, colas

Crearás estructuras de datos para almacenar, con una estrategia predefinida, los objetos resultado de instanciar las clases programadas en el módulo 1.

M3: árboles

Utilizarás árboles como estructura de apoyo a la hora de ejecutar el algoritmo principal de la aplicación.

A diferencia de la mayoría de las prácticas de la carrera, en este caso serás tú quien decida qué aplicación implementar. Eso sí, la aplicación que desarrolles deberá cumplir unos mínimos requisitos, que estarán debidamente especificados en el enunciado.

El enunciado contendrá, además, un ejemplo concreto de aplicación. Es decir, una idea concreta con la que se pueden cumplir los requisitos impuestos por el enunciado. En concreto, se trata de un juego de cartas coleccionables, como podría ser Magic: The Gathering o similares. Si no se te ocurre ninguna otra idea, puedes utilizar este ejemplo para tu aplicación, pero será más divertido si trabajas sobre tu propia idea.

Visión global de la práctica

En términos generales, esta práctica consiste en el desarrollo de una aplicación que trabaja con una serie de objetos, relacionados entre sí mediante herencia y composición, los cuáles van a ser utilizados para dos tareas:

  • Van a ser almacenados, de forma ordenada, en unos contenedores que también tendrás que diseñar. Observa que el hecho de que pueda existir una relación de orden entre los objetos permite decir cosas como el objeto A es mayor que el objeto B.

  • Un conjunto de colecciones de objetos van a competir entre sí, en forma de torneo de eliminación directa (octavos de final, cuartos de final, etc.).

Hasta ahora hemos hablado de objetos, pero de una forma más precisa, ¿qué tipo de objeto deberás modelar? La descripción dada hasta ahora es aplicable a muchas ideas diferentes. En la siguiente tabla tienes algunos ejemplos en los que se muestra, para diferentes objetos, cuál sería el significado de "contenedor de objetos" y "criterio de comparación".

Objeto Contenedor Comparación
Coche Paddock El más rápido
Atleta Equipo El que salta más alto
Soldado Ejército El que dispara primero
Carta Magic Mazo de cartas La carta más poderosa

Para que sea más fácil de entender, el enunciado de los módulos se basará en uno de estos ejemplos. En concreto, el mazo de cartas Magic. En tu aplicación puedes utilizar alguno de estos ejemplos, o puedes inventar el tuyo propio. Sea cual sea la opción que escojas, no olvides que deberás cumplir los requisitos descritos en los enunciados de los módulos 1, 2 y 3.

Cada uno de los módulos se centrará en una tarea concreta:

Módulo 1

El modelado es la tarea principal a ejecutar en este módulo. Tendrás que decidir con qué tipo de objetos vas a trabajar (coches, cartas, otros...), asignar las características que definen a dichos objetos y establecer un criterio de comparación válido para ellos.

Módulo 2

Este módulo tiene dos tareas principales: la creación de contenedores y la insercción de forma ordenada. Por ejemplo, si estás trabajando con coches, habrá un tipo de contenedor en el cual los coches estén almacenados del más rápido al más lento. Puesto que vas a trabajar con los objetos que modelaste en el módulo 1, ahora sufrirás las consecuencias de las decisiones de diseño que hayas tomado previamente. Observa también la importancia que cobra aquí el criterio de comparación que escogiste.

Módulo 3

Con los objetos implementados en el módulo 1 los cuáles pueden ser comparados entre sí; así como los contenedores de objetos del módulo 2, que almacenan colecciones ordenadas de objetos, en el módulo tres programarás un torneo en el que compitan dichas colecciones. Modelarás la competición como un árbol, y desarrollarás el algoritmo para buscar al ganador.

¿Qué se pide?

La práctica está dividida en tres módulos, cada uno de ellos con un enunciado aparte. Cada módulo será una práctica en si misma, es decir, tendrá un plazo de entrega y será evaluada como tal. Sin embargo, cada módulo dependerá del código escrito para el módulo anterior.

Para cada módulo se pide que el programa compile y ejecute correctamente.

El código ha de estar minuciosamente comentado usando javadoc. Cada decisión de diseño, cada clase, cada método ha de tener toda su funcionalidad comentada. Se valorará la claridad tanto de la explicación como del código.

¿Cómo documentar el código?

Para la labor de documentación del código, se utilizará el programa javadoc de extracción automática de documentación del código que viene incluido en la distribución del jdk. Este programa lee el fichero en el que está escrito el programa, extrae los comentarios escritos por el programador, y genera un conjunto de ficheros HTML de aspecto similar a la documentación del API de java cuyo contenido es el incluido en los comentarios y que se puede visualizar con cualquier navegador.

To document the code, you will use javadoc, a tool that automatically extracts the documentation from the code and is included in the jdk distribution. javadoc reads the source file, grabs the comments (manually writen by the programmer) and creates a collection of HTML files that looks like the java API documentation.

Para que este documento se genere adecuadamente es preciso poner los comentarios inmediatamente antes de la definición de una clase, interface, método, constructor o campo. Cada comentario se ha de comenzar por la secuencia de caracteres "/**" y terminarla con la secuencia "*/". He aquí un ejemplo de dónde se debe incluir la documentación:

/** 
Descripción de la funcionalidad de la clase. Lo que representa y lo que hace.
    @author  (Nombre del autor o autores de la clase)
    @version (Indica el número de versión si hay más de una)
    @see (cuando se quiere referenciar alguna clase, variable o 
         método relacionado)
*/
public class nombreClase {

/** Descripción de un campo de la clase
    @see (cuando se quiere referenciar alguna clase, variable o 
         método relacionado)
*/
public String nombreAtributo;

/** Descripción del método con su funcionalidad, parámetros de entrada, 
    valor de retorno, excepciones si las hay, etc.
    @param (para describir los parámetros)
    @return (para describir el valor de retorno)
    @exception (para describir las excepciones si las hay)
    @see (cuando se quiere referenciar alguna clase, variable o 
         método relacionado)
*/
public static void nombreMetodo() {
    //código del método
}
} // End of class

Una vez terminado de escribir el código con su documentación, la herramienta javadoc se encarga de confeccionar el conjunto de documentos HTML que engloban los comentarios. Se pide que la documentación de la práctica se produzca ateniéndose al formato que se acaba de describir.

Cómo y cuándo hacer las entregas

El enunciado del proyecto se divide en tres partes, correspondientes a los tres módulos funcionales que tienes que implementar. Cada una de estas partes lleva asociada una entrega. Por lo tanto, acabar el proyecto significa haber realizado tres entregas correctas.

El sistema de entrega se especificará a través de un aviso en aula-global.

IMPORTANTE: Por último, pero no menos importante, los profesores del curso realizarán un control de todas las aplicaciones para verificar la originalidad del código entregado. Cada entrega se contrastará con todas las aplicaciones de una misma titulación y entre titulaciones que tengan la misma práctica. Todos los alumnos que incurran en algún caso de copia, serán sancionados con una penalización que afectará a sus calificaciones y se estudiarán otras posibles medidas a adoptar. También se notificará al director de cada titulación para que lleve un registro de este tipo de situaciones. Cada estudiante es responsable de proteger su propio código y por tanto se aplicará una sanción tanto a la persona que ha desarrollado el código original como a la que lo ha copiado

Importante: Puedes ver las fechas que marcan el inicio y final de cada uno de los períodos en la planificación de sesiones de cada grupo de prácticas

Criterios de evaluación

¿Qué hay que entregar?

La nota que finalmente obtengas dependerá de tres partes:

  • El código entregado.

  • La presentación final.

  • El examen de laboratorio

Tanto las entregas como la presentación se realizan por parejas. El examen de laboratorio se realizará de forma individual en las fechas indicadas en la planificación.

Sobre el código a entregar

Se realizarán tres entregas, correspondientes a los tres módulos funcionales en los que se divide el programa a implementar en el proyecto. El sistema de entrega se especificará mediante un mensaje en aula-global

La nota correspondiente al código entregado dependerá no sólo del correcto funcionamiento del programa sino también de aspectos como la calidad del código o la existencia de comentarios coherentes, escritos en formato javadoc.

Sobre la presentación

Una vez finalizado el plazo de entrega del proyecto, tendrá lugar una sesión de prácticas en la que los alumnos presentarán sus trabajos ante el resto de la clase.

Aquí van algunas recomendaciones para realizar la presentación:

  • Una transparencia = Una idea. No recargues las transparencias con texto sin significado, no acumules demasiado contenido en la misma transparencia.

  • Selecciona los 4 elementos más relevantes de tu trabajo y centrate en ellos. Una buena capacidad de síntesis será un punto a tu favor.

  • Sé claro en tu exposición, que quede bien claro que entiendes lo que dices.

  • Demuestra todo lo que has trabajado, que quede bien claro que conoces el programa punto por punto.

  • Revisa ortográfica y gramaticalmente tus diapositivas, las erratas se ven mucho y causan una mala impresión.

  • Ensaya antes: descubrirás fallos, podrás introducir mejoras y la presentación te saldrá mejor.

  • Reparte la tarea: recuerda que se trata de un trabajo por parejas. También aquí debe quedar patente.

  • Muy importante: controla el tiempo. Dispondrás de un tiempo muy breve y el control de tiempos será muy estricto.

  • Ordenado sabe mejor.

Sobre el examen de laboratorio

El examen de laboratorio se realizará de forma individual en las fechas indicadas en la planificación. El examen consistirá en realizar alguna modificación sobre el código de la práctica. Cada estudiante podrá escoger si modificará su propio código o un código de referencia que se proporcionará unos días antes del examen

Criterios de evaluación

Los criterios de evaluación están especificados en la planificación de la asignatura