Programación 3

Universidad de Alicante, 2021–2022

Práctica 1

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

Aclaraciones

  • (cualquier aclaración adicional aparecerá en este enunciado)

ImperialCommander

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 ImperialCommander, que iremos desarrollando a lo largo de las prácticas. Las coordenadas se representan con dos números (x,y).

El código en C++ que se acompaña es el que debes traducir a Java. El operador == equivale al método ‘equals’ de la implementación de Java (los operadores de Java no se pueden sobrecargar para usarlos con objetos nuevos como se hace en C++, en Java hay que usar métodos como ‘equals’ o ‘add’ para conseguir el mismo efecto). 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.

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-ImperialCommander-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)

En el seminario sobre Git/GitHub y Eclipse se explica cómo importar en GitHub el proyecto plantilla que hemos preparado para las prácticas de la asignatura. El proyecto contiene el paquete mains dentro de una carpeta de código fuente llamada src, y el fichero mains/MainP1.java. También contiene el paquete model con un fichero Coordinate.java vacío, que debes rellenar con el código de C++ adaptado a Java.

Documentación

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

  • Ficheros: debe incluir el nombre y dni del autor de la práctica usando la anotación @author
  • Clases: propósito de la clase
  • Métodos: propósito del método + parámetros de entrada (@param), valor de retorno (@return) y funciones dependientes para operaciones más complejas, y excepciones cuando corresponda (@throws).
  • Atributos: propósito de cada uno de ellos

No se debe entregar los ficheros HTML que genera Javadoc, y tampoco debes generar la documentación automáticamente con plugins, es una buena práctica generar la documentación a mano, justo en el momento en que se empieza a escribir el método.

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++.

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.  
  • 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. 

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 del paquete model). En un terminal, sitúate en el directorio ‘src’ de tu proyecto Eclipse e introduce la orden

tar czvf prog3-imperialCommander-p1.tgz model

Sube este fichero prog3-imperialCommander-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".