Desarrolla una app en Java para calcular las puntuaciones de un partido de golf siguiendo las modalidades Stroke Play y Stableford. El sistema debe procesar los golpes realizados por varios jugadores en un recorrido de 18 hoyos y calcular sus puntuaciones según ambas modalidades.
Se proporcionan dos clases base para el desarrollo:
Contiene el programa principal con ejemplos de uso del sistema, incluyendo:
- Creación de jugadores y sus recorridos
- Ejemplos de puntuaciones en ambas modalidades
- Salida esperada del programa
Clase que gestiona el campo de golf y los recorridos de los jugadores, proporcionando:
- Almacenamiento de golpes por jugador y hoyo
- Métodos para añadir y recuperar recorridos de jugadores
Has de incluir la dependancia a Google Guava en tu proyecto.
Consulta la referencia de la librería para saber cómo añadirla:
https://github.com/google/guava
-
Gestión de Jugadores
- Implementa una clase
Player
que almacene:- Iniciales del jugador.
- Hándicap.
- Puntuación total.
- Puntos Stableford.
- Implementa una clase
-
Tarjeta de Puntuación
- Implementa una clase
ScoreCard
que gestione:- Hasta 4 jugadores (A, B, C, D), opcionales.
- Colección de hoyos con su par correspondiente.
- Referencia al campo (de tipo
Course
)
- Implementa una clase
-
Modalidades de Juego
- Implementa el patrón Strategy para las dos modalidades de puntuación:
- Stroke Play: suma total de golpes del recorrido de un jugador/a.
- Stableford: puntos según la diferencia con el par del hoyo. Compara el número de golpes del jugador/a en cada hoyo con el par del hoyo para averiguar la categoría obtenida en ese hoyo. La categoría indica los puntos a sumar o restar al total del jugador según esta equivalencia:
- Double Bogey (2 o más sobre par): -3 puntos
- Bogey (1 sobre par): -1 punto
- Par: 0 puntos
- Birdie (1 bajo par): +2 puntos
- Eagle (2 bajo par): +5 puntos
- Albatross (3 bajo par): +8 puntos
- Crea la interfaz
GolfPlay
para implementar la estrategia o modalidad de juego (Stroke Play o Stableford). - La clase
ComputeCard
aplica la estrategia /modalidad de juego seleccionada.
- Implementa el patrón Strategy para las dos modalidades de puntuación:
-
Hoyo
- Implementa una clase
Hole
que representa un hoyo con su número en el circuito y su par.
- Implementa una clase
-
Requisitos de Implementación
- Usa el patrón Strategy para las modalidades de juego.
- Implementa los principios Open/Closed y SRP.
- Utiliza
Optional
para la gestión de jugadores enScoreCard
. - Puedes hacer uso de
Streams
para el procesamiento de datos. - Implementa un tipo enumerado para el sistema Stableford.
Salida por consola
Utiliza el patrón Strategy para estructurar la aplicación.
Consulta su diseño en el libro sobre patrones de software proporcionado en la bibliografía del curso.
Configura el plugin jar
para generar un fichero jar
ejecutable con la clase principal App.java
.
Además, tendrás que incluir el siguiente plugin en el archivo de configuración del proyecto.
<!-- mvn clean compile assembly:single -->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>edu.asestatuas.golfstrokes.App</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
Genera el fichero jar
desde línea de comandos:
mvn clean compile assembly:single
Obtendrás en el directorio target
un fichero llamado:
artifactId-1.0-SNAPSHOT-jar-with-dependencies.jar
Configura la task jar
para generar un fichero jar
ejecutable con la clase principal App.java
.
Además, tendrás que incluir la siguiente tarea en el archivo de configuración del proyecto.
// construir con: gradle fatJar
// build/libs/brunosbox-1.0-SNAPSHOT.jar
task fatJar(type: Jar) {
manifest {
attributes 'Main-Class': 'edu.asestatuas.golfstrokes.App'
}
duplicatesStrategy = DuplicatesStrategy.INCLUDE
from { configurations.compileClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
with jar
}
Genera el fichero jar
desde línea de comandos:
gradle fatJar
Obtendrás en el directorio build/libs
el fichero .jar
.
Se valorará:
- Correcta implementación del patrón Strategy.
- Uso adecuado de
Optional
yStreams
. - Uso del tipo de colección Java adecuado.
- Implementación de un tipo enumerado para el sistema Stableford.
- Implementación de los principios Open/Closed y SRP.
- Implementación de pruebas unitarias.
- Crea un nuevo repo PRIVADO en tu cuenta en Github y compártelo con el usuario dfleta.
- Crea un nuevo directorio en tu equipo y clona el repositorio de Github.
- Abre VSCode /Eclipse /Netbeans /IntelIJ y establece como workspace el directorio que has clonado.
- Crea un proyecto Gradle o Maven.
- Pon el proyecto en seguimiento en Git y configura
.gitignore
. - Copia y pega la función principal
App.java
. Utilízala como guía en el proceso TDD. Comenta aquellas partes que no hayas implementado. - Completa las clases que aquí se indican implementando los casos test que necesites. Practica TDD.
- Realiza
commits
como mínimo cada vez que termines una historia de usuario. Sin commit periódicos, no corrijo el examen.
- Crea un repo PRIVADO en tu GitHub y compártelo con el usuario dfleta.
- Realiza commits periódicamente mientras avanzas en el desarrollo de la aplicación. Sin commit periódicos, no corrijo el examen.
- Realiza un
push
al repo remoto en GitHub SÓLO cuando hayas terminado el proyecto.