J'essaie d'avoir une idée de la façon de concevoir et de penser de manière orientée objet et je souhaite obtenir des commentaires de la communauté sur ce sujet. Ce qui suit est un exemple de jeu d'échecs que je souhaite concevoir de manière OO. Il s'agit d'une conception très large et mon objectif à ce stade est simplement d'identifier qui est responsable de quels messages et comment les objets interagissent pour simuler le jeu. Veuillez indiquer s'il y a des éléments de mauvaise conception (couplage élevé, mauvaise cohésion, etc.) et comment les améliorer.
Le jeu d'échecs a les classes suivantes
- Planche
- Joueur
- Pièce
- Carré
- Jeu d'échecs
Le tableau est composé de carrés et le tableau peut donc être chargé de la création et de la gestion des objets Square. Chaque pièce est également sur un carré, donc chaque pièce a également une référence au carré sur lequel elle se trouve. (Est-ce que ça a du sens?). Chaque pièce est alors responsable de se déplacer d'une case à l'autre. La classe de joueur contient des références à toutes les pièces qu'il possède et est également responsable de leur création (le joueur doit-il créer des pièces?). Player a une méthode takeTurn qui à son tour appelle une méthode movePiece qui appartient à la classe de pièce qui change l'emplacement de la pièce de son emplacement actuel à un autre emplacement. Maintenant, je ne sais pas exactement de quoi la classe du Conseil doit être responsable. J'ai supposé qu'il était nécessaire de déterminer l'état actuel du jeu et de savoir quand le jeu est terminé. Mais quand un morceau le change ' s emplacement comment le tableau doit-il être mis à jour? devrait-il maintenir un tableau séparé de carrés sur lesquels les pièces existent et qui sont mises à jour au fur et à mesure que les pièces se déplacent?
De plus, ChessGame crée initialement le plateau et les objets du joueur qui à leur tour créent respectivement des carrés et des pièces et démarrent la simulation. En bref, cela pourrait ressembler au code de ChessGame
Player p1 =new Player();
Player p2 = new Player();
Board b = new Board();
while(b.isGameOver())
{
p1.takeTurn(); // calls movePiece on the Piece object
p2.takeTurn();
}
Je ne sais pas comment l'état du conseil d'administration sera mis à jour. La pièce doit-elle avoir une référence à la planche? Où devrait être la responsabilité? Qui détient quelles références? Veuillez m'aider avec vos entrées et signaler les problèmes dans cette conception. Je ne me concentre délibérément sur aucun algorithme ou sur d'autres détails du jeu car je ne m'intéresse qu'à l'aspect design. J'espère que cette communauté pourra fournir des informations précieuses.
takeTurn()
si le mouvement de p1 met fin à la partie. Commentaire moins pointilleux: je trouve plus naturel d'appeler les joueurswhite
etblack
.