Skip to content

dfleta/golf-strokes-strategy-pattern

Repository files navigation

Examen de Programación: Sistema de Puntuación de Golf

Descripción

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.

Golf Score Card

Clases proporcionadas

Se proporcionan dos clases base para el desarrollo:

App.java

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

Course.java

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

Dependencias

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

Requisitos

  1. Gestión de Jugadores

    • Implementa una clase Player que almacene:
      • Iniciales del jugador.
      • Hándicap.
      • Puntuación total.
      • Puntos Stableford.
  2. 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)
  3. 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.
  4. Hoyo

    • Implementa una clase Hole que representa un hoyo con su número en el circuito y su par.
  5. 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 en ScoreCard.
    • Puedes hacer uso de Streams para el procesamiento de datos.
    • Implementa un tipo enumerado para el sistema Stableford.

Ejemplo de Uso

Salida por consola

Salida CLI Salida CLI

Diagrama de clases UML / Arquitectura de la app.

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.

Diagrama de clases UML

Dependencia Google Guava en el fatJar.

Maven

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

Gradle

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.

Evaluación

Se valorará:

  1. Correcta implementación del patrón Strategy.
  2. Uso adecuado de Optional y Streams.
  3. Uso del tipo de colección Java adecuado.
  4. Implementación de un tipo enumerado para el sistema Stableford.
  5. Implementación de los principios Open/Closed y SRP.
  6. Implementación de pruebas unitarias.

Prepara el proyecto

  1. Crea un nuevo repo PRIVADO en tu cuenta en Github y compártelo con el usuario dfleta.
  2. Crea un nuevo directorio en tu equipo y clona el repositorio de Github.
  3. Abre VSCode /Eclipse /Netbeans /IntelIJ y establece como workspace el directorio que has clonado.
  4. Crea un proyecto Gradle o Maven.
  5. Pon el proyecto en seguimiento en Git y configura .gitignore.
  6. 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.
  7. Completa las clases que aquí se indican implementando los casos test que necesites. Practica TDD.
  8. Realiza commits como mínimo cada vez que termines una historia de usuario. Sin commit periódicos, no corrijo el examen.

Entrega

  1. Crea un repo PRIVADO en tu GitHub y compártelo con el usuario dfleta.
  2. Realiza commits periódicamente mientras avanzas en el desarrollo de la aplicación. Sin commit periódicos, no corrijo el examen.
  3. Realiza un push al repo remoto en GitHub SÓLO cuando hayas terminado el proyecto.

About

Examen modulo programación e contornos de desenvolvemento do ciclo DAM

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages