Programación 3

Universidad de Alicante, 2020–2021

Práctica 1

Plazo de entrega: Hasta el domingo 27 de septiembre de 2020 a las 23:59h
Peso relativo de está práctica en la nota de prácticas: 10%

Battleship

Introducción

En esta primera práctica realizaremos la implementación de una clase en Java a partir del código de esa misma clase en C++. El objetivo es conocer las diferencias fundamentales entre Java y C++.

La clase, perteneciente al modelo sobre el que trabajaremos durante todo el curso, se denomina Coordinate. Representa una coordenada en el tablero del juego Battleship o Hundir la flota. Aunque en el juego las coordenadas se representan con un número y una letra, en la implementación las representaremos con dos números (columna y fila).

El código en C++ que se acompaña incluye el destructor para la clase. Dado que no existe una traducción exacta de este a Java, lo omitiremos en la implementación Java. El operador == equivale al método ‘equals’ de la implementación de Java. Las particularidades de la implementación del método equals en Java se comentarán en clase; si estás utilizando Eclipse puedes usar la opción Source / Generate hashCode() and equals() del menú, pero asegúrate de que entiendes bien el código generado y sobre todo debes revisar la implementación de equals() para que se ajuste a las especificaciones. Lee atentamente el fichero README.txt que acompaña al código para más información sobre la conversión de código C++ a Java.

La Figura 1 describe gráficamente en UML la clase Coordinate.

Figura 1. Diagrama de clases UML.
Figura 1. Diagrama de clases UML.

Ten en cuenta que en C++ es necesario utilizar un atributo ‘dim’ (que será siempre 2, pero puede cambiar en prácticas posteriores), para almacenar el tamaño del vector ‘components’, pero en Java no es necesario, todos los vectores tienen un atributo ‘length’, por lo que debes usar ‘components.length’ en Java en lugar del ‘dim’ de la implementación en C++.

En Java, la función main se debe encapsular dentro de una clase como método público y estático. Esta clase está definida en un fichero llamado MainP1.java, que realiza las mismas operaciones que se encuentran implementadas en C++ en el fichero mainP1.cc. Este será el programa principal de esta práctica. No debes crearlo tú. Sigue leyendo para saber cómo obtenerlo.

Pruebas unitarias (segunda sesión de prácticas)

El archivo prog3-battleship-p1-pretest.tgz contiene una carpeta model con pruebas unitarias. En la segunda sesión de prácticas veremos como usar estas pruebas para evaluar nuestro código.

Proyecto base para Eclipse (segunda sesión de prácticas)

Importarás la Plantilla de proyecto Eclipse para prácticas desde Github. Esta contiene un proyecto Eclipse preconfigurado para las prácticas de la asignatura. El proyecto contiene el paquete mains dentro de una carpeta de código fuente llamada src. Los archivos .class serán generados por Eclipse en una carpeta bin que no será visible desde el propio Eclipse. El proyecto ya contiene el fichero mains/MainP1.java. Sigue las instrucciones de tu profesor para importarlo a Eclipse y añadir tu código a él.

Documentación

Debéis incluir en los ficheros fuente todos los comentarios necesarios en formato Javadoc. Estos comentarios deben definirse para:  

  • Ficheros: debe incluir nombre y dni de los autores usando la anotación @author
  • Clases: propósito de la clase: 3 líneas
  • Operaciones: 1 línea para funciones triviales, y 2 líneas + parámetros de entrada, parámetros de salida y funciones dependientes para operaciones más complejas.
  • Atributos: propósito de cada uno de ellos: 1 línea  

Estructura de paquetes y directorios

En Java, la estructura de paquetes se implementa a nivel de sistema de ficheros mediante directorios. La práctica debe ir organizada en dos paquetes o directorios:  

  • model : contiene el fichero Coordinate.java
  • mains : contiene el fichero MainP1.java

Puedes usar mains/MainP1.java para comprobar si tu código al menos compila, ya que realiza llamadas a todos los métodos públicos de la clase Coordinate. El resultado de su ejecución debe ser similar al de la ejecución de la versíon en C++.

Los ficheros fuente deben tener documentación (comentarios) en el formato de Javadoc, pero no se debe entregar los ficheros HTML que genera esta herramienta.

Requisitos mínimos para evaluar la práctica

  • La práctica debe poder ejecutarse sin errores de compilación. 
  • Ninguna operación debe emitir ningún tipo de comentario o mensaje por salida estándar, a menos que se indique lo contrario. Evitad también los mensajes por la salida de error. 

  • Se debe respetar de manera estricta el formato del nombre de todas las propiedades (públicas, protegidas y privadas) de las clases, tanto en cuanto a ámbito de visibilidad como en cuanto a tipo y forma de escritura. En particular se debe respetar escrupulosamente la distinción entre atributos de clase y de instancia, así como las mayúsculas y minúsculas en los identificadores.
  • La práctica debe estar suficientemente documentada, de manera que el contenido de la documentación que se genere mediante la herramienta javadoc sea significativo.  

Entrega de la práctica

La práctica se entrega en el servidor de prácticas del DLSI.

Debes subir allí un archivo comprimido con tu código fuente (sólo archivos .java). En un terminal, sitúate en el directorio ‘src’ de tu proyecto Eclipse e introduce la orden

tar czvf prog3-battleship-p1.tgz model

Sube este fichero prog3-battleship-p1.tgz al servidor de prácticas. Sigue las instrucciones de la página para entrar como usuario y subir tu trabajo.

Evaluación 

La corrección de la práctica es automática. Esto significa que se deben respetar estrictamente los formatos de entrada y salida especificados en los enunciados, así como la interfaz pública de las clases, tanto en la signatura de los métodos (nombre del método, número, tipo y orden de los argumentos de entrada y el tipo devuelto) como en el funcionamiento de éstos. Así, por ejemplo, el método model.Coordinate(int,int) debe tener exactamente dos argumentos de tipo int.

Tienes más información sobre el sistema de evaluación de prácticas en la ficha de la asignatura.

Además de la corrección automática, se va a utilizar una aplicación detectora de plagios. Se indica a continuación la normativa aplicable de la Escuela Politécnica Superior de la Universidad de Alicante en caso de plagio:

“Los trabajos teórico/prácticos realizados han de ser originales. La detección de copia o plagio supondrá la calificación de”0" en la prueba correspondiente. Se informará la dirección de Departamento y de la EPS sobre esta incidencia. La reiteración en la conducta en esta u otra asignatura conllevará la notificación al vicerrectorado correspondiente de las faltas cometidas para que estudien el caso y sancionen según la legislación vigente".

Aclaraciones

  • Aunque no se recomienda, se pueden añadir los atributos y métodos privados que se considere oportuno a las clases. No obstante, eso no exime de implementar TODOS los métodos presentes en el enunciado, ni de asegurarse de que funcionan tal y como se espera, incluso si no se utilizan nunca en la implementación de la práctica. 
  • Cualquier aclaración adicional aparecerá en este enunciado.