SOLUCIÓN DE PROBLEMAS SOLID #1
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Principios SOLID violados
Liskov Substitution Principle
En la clase Trail que extiende de la clase GameObject vemos que el método getBounds lo deja con un return null, esto viola el principio Liskov ya que este indica que cualquier clase hija puede sustituir al padre y el programa debe seguir funcionando, por lo tanto, si sobreescribimos un método que no hace nada como es el caso, incumple Liskov.
Dependency inversion principle
La clase Game depende de otras clases de bajo nivel como Handler y HUD, el principio de inversión de dependencia indica que las clases de alto nivel no deberían depender de clases de bajo nivel, si no que ambas deben depender de abstracciones, por lo tanto, se está violando este principio.
Single responsibility principle
Insertando imagen...
En la clase Game el método tick y render son métodos que no tienen nada que ver con esta clase, ya que aquí se está inicializando los métodos tick (handler, hub y sawner) y render (handler y hub) de otras clases.
Propuestas de solución
Liskov Substitution Principle
Para solucionar el problema se creó otra clase abstracta que se lleve la clase que no era usada por el Trail, de esta forma solo las clases que necesiten del método getBounds van a extender de esa, mientras que Trail como no la necesita, solo extiende de GameObject.
Dependency inversion principle
Para solucionar la dependencia que existía en Game se ha procedido a crear interfaces que contengan los métodos necesarios que hagan que esta dependencia se rompa, de esta forma la clase Game queda de forma independiente.
Single responsibility principle
Se ha divido en dos clases Game para cumplir el principio de única responsabilidad los métodos que no pertenecían en esta clase se lo alojo en la clase GameInicializar, de esta forma se logra cumplir que cada clase tiene una responsabilidad diferente.