Estoy diseñando un juego de ajedrez en Java (sin AI, solo controlado por el usuario), y todavía me estoy acostumbrando a OOP. Tengo dos preguntas.Diseñando objetos para un juego de ajedrez en Java
estaba pensando de tener, además de Game
, Cell
, Piece
y Board
objetos, un objeto de Player
.
Mi pregunta es, ¿realmente lo necesito? Por supuesto que no es necesario, pero ¿se considera que una opción es un mejor diseño? Por un lado, parece que un jugador es útil para contener información sobre piezas de jugadores y debe contener métodos como takeTurn()
. (Para mi implementación, también quiero hacer un seguimiento de todos los movimientos posibles, así que tendré un método getAllMoves()
). Por otro lado, ¿Player no es simplemente una reorganización de los datos existentes? Cada Pieza ya tiene una indicación de a qué jugador pertenece. Y como mi juego no contiene AI, podría tener sentido que takeTurn()
pertenezca a Game
, en lugar de Player
. Por primera vez, quizás Player
solo tenga el método getAllMoves()
, que utiliza sus datos pero no toma medidas.
La segunda pregunta, relevante si la respuesta a la primera pregunta es sí, es ¿cómo organizo las relaciones entre los objetos? getAllMoves()
tomará como entrada una matriz de celdas; pero parece extraño que la clase Player dependa del hecho de que sus celdas coinciden (son un subconjunto de) las celdas pasadas como entrada. Se sentiría más bien si los datos divididos por jugador de las células se mantuvieran juntos con la matriz de todas las celdas de la Junta, y se actualizaran juntos, garantizando así que estén de acuerdo. Por supuesto, la garantía de que están de acuerdo existiría de cualquier manera, pero parece que el objeto Player no debería estar al tanto de la garantía que está teniendo lugar en el objeto Board
.
¿Cómo manejo estas preguntas?
Gracias!
Suena como si estuviera intentando un [BDUF] (http://en.wikipedia.org/wiki/Big_Design_Up_Front) - tal vez podría considerar una forma alternativa de expulsar su modelo de objetos, como [TDD] (http://msdn.microsoft.com/en-us/magazine/dd882516.aspx) – razlebe
BTW Creo que diseñar un juego como el ajedrez es una muy buena forma de familiarizarse con OOP. Recuerde favorecer las asociaciones por interfaz sobre subclases directas porque estas últimas crean un acoplamiento ajustado que no siempre es necesario. –