Open luchoxx87 opened 2 years ago
Buenas chicos, en la actualidad en este Issue (fork "12—formacion" ) no están corriendo los tests; empiecen a investigar que puede ser. Si desarrollan una idea o tienen teorías, pueden usar este foro para comentar la idea y lo vemos entre todos.
Formación
Pensar en como poder hacer que los Jugadores puedan tener hasta 3 formaciones para armar. La idea es ofrecer plantillas con 5 formaciones clásicas (aunque a futuro se pueden agregar más). Las formaciones tienen que tener nombre y pensar en una forma potable de encarar el posicionamiento de los jugadores en la táctica. Siguiendo con lo que hablamos, tendríamos una clase
Formacion
que funciona como contenedora de lasLineas
. Formación tendría el nombre y estaría bueno que devolviese una cadena tipo "4-4-2".Linea
seria la clase que contiene laPosicionEnCancha
, teniendo en cuenta que vamos a leer las posiciones de abajo hacia arriba y de derecha a izquierda, es importante que las Posiciones tengan un numero de linea (dejando el valor 0 para la linea del arquero). Y por ultimo la clasePosicionEnCancha
que relaciona a un jugador (puede valer null cuando no hay jugador asignado) junto con una Posición. También podríamos tener un numero de camiseta en esta clase.Clase PosicionEnCancha
Jugador
de la posición (puede ser null).Posicion
que va a cubrir (nunca null).QuimicaJugador
que devuelva la Química ponderada del jugador (devuelve cero si no hay jugador asignado) con valores entre 1 y 10. Esto vamos a tener que ponernos de acuerdo como ponderar cosas como:MismoEquipo()
,JuegaDe()
,MismoPais()
, etc.EsNumero(byte)
que devuelvetrue
si la PosicionEnCancha tiene asignada el número recibido por parámetro.Clase Linea
QuimicaJugadores
que devuelva la sumatoria de las Químicas de los jugadores que la compongan.CantidadJugadores
que devuelva la cantidad de jugadores que componen la linea.CantidadPosiciones
que devuelva la cantidad de posiciones que componen la linea (esta propiedad va a ser importante para poder generar la cadena representativa de la formación).ExisteNumero(byte)
que reciba como parámetro un numero de camiseta y devuelvetrue
si alguna de las posiciones posee tal número.Clase Formación
QuimicaJugadores
que devuelva la sumatoria de las Químicas de los jugadores de las Lineas.ToString()
para que devuelva una cadena representativa de la Formación (ejemplos: "4 - 4 - 2", "4 - 3 - 1 - 2", "4 - 3 - 3"). Recordar que no se toma al arquero como parte de la linea. Para redefinir este método podemos usar StringBuilder (se sugiere como buena practica, según la documentación oficial es la forma optimizada para crear cadenas).ExisteNumero(byte)
que reciba como parámetro un numero de camiseta y devuelvetrue
si alguna de las Lineas posee tal número.byte NumeroDisponible
que devuelva el primer numero de camiseta (empezando por el 1). La idea va a ser recorrer con un for preguntando si existe el numero en iteración en la Formación (oh, vamos a consumir el métodobool Formacion.ExisteNumero(byte)
¿quién lo diría :smiley:?). Hay que tener en cuenta:InvalidOperationException
con el mensaje "No hay más dorsales disponibles".Clase FormacionBuilder
Dado que la formación es un objeto complejo por su composición y correcto orden de creación, es necesario la aplicación de un patrón de creación (el Builder) para simplificar la instanciación de formaciones.
Para esta clase vamos a usar el concepto de Interfaz fluida, por lo cual ES IMPORTANTE que todos los métodos de esta clase, devuelvan una instancia de la misma (es decir, la ultima linea siempre es
return this;
).Formacion
(el getter si puede ser publico) yLinea
.IniciarFormacion()
: instancia la formación interna del builder.AgregarLinea()
: instancia la linea interna y la agrega a la formación.AgregarPosicion(Futbolista futbolista, Posicion posicion, byte? nro = null)
: instancia unaPosicionEnCancha
(variable interna dentro del método, no hace falta que sea un atributo de la clase) con el futbolista y la posición y la agrega a la linea interna del builder. Con respecto al nro, si tiene un valor se asigna de una, pero si no tiene, la idea es que la formación se lo asigne automáticamente (acá es cuando usamos la propiedadFormacion.NumeroDisponible
que ya programamos 😎 y ademas quedaría cheto si usamos el operador ??).AgregarPosicion(PosicionEnCancha posicionEnCancha)
: para aprovechar las posiciones que ya tenemos instanciadas, vamos a sobrecargar el anterior método recibiendoPosicionEnCancha
. En caso de que la posición recibida por parámetro no tenga asignado un numero de camiseta, se lo tenemos que asignar de forma análoga al punto anterior. ESTARÍA BUENO reutilizar código para las 2 versiones deNuevaPosicion
(en la cual una invoque a la otra), pensar en ello.Les muestro un ejemplo de instanciación cuando tengamos el builder listo.
Buenas, hoy en clase (21-06-2023) hablamos de agregar unas clases para ayudar a la persistencia de:
Alineacion
(Formación esta agregada por ellas)PosicionFormacion
(Formación va a estar compuesta de estas clases).