Clase: Board
Método(s): move(), checkCollision(), locateApple(), initGame()
Descripción de la solución: Se aplicó la técnica de refactorización Replace Array with Object para eliminar los arreglos paralelos de primitivos int[] x e int[] y que representaban las coordenadas de cada segmento de la serpiente, y los campos sueltos apple_x / apple_y. Se introdujo un record Point inmutable como abstracción de dominio y el cuerpo de la serpiente se representa como List segments. La posición de la manzana pasa a ser Point applePosition. Todos los métodos que accedían a los arreglos de forma sincronizada se simplifican para operar sobre objetos cohesivos, eliminando la variable dots (reemplazada por segments.size()) y el límite estático ALL_DOTS = 900.

Clase: Board
Método(s): move(), checkCollision(), locateApple(), initGame()
Descripción de la solución: Se aplicó la técnica de refactorización Replace Array with Object para eliminar los arreglos paralelos de primitivos int[] x e int[] y que representaban las coordenadas de cada segmento de la serpiente, y los campos sueltos apple_x / apple_y. Se introdujo un record Point inmutable como abstracción de dominio y el cuerpo de la serpiente se representa como List segments. La posición de la manzana pasa a ser Point applePosition. Todos los métodos que accedían a los arreglos de forma sincronizada se simplifican para operar sobre objetos cohesivos, eliminando la variable dots (reemplazada por segments.size()) y el límite estático ALL_DOTS = 900.