Denis Conan et Christian Bac Revision : 430 CSC4102 Télécom SudParis 7 décembre 2009
Avertissement : cet exemple de spécification et de conception correspond à un sujet donné en bureau d étude noté du module CSC4002 il y a quelques années. Par conséquent, le programme ayant changé depuis, il y manque des éléments, comme la formalisation des préconditions et des postconditions des cas d utilisation, ou encore la préparation des tests de validation. Par ailleurs, la modélisation est très incomplète. 1 Cahier des charges «Le jeu d échecs se joue entre deux adversaires qui déplacent alternativement des pièces sur un plateau carré appelé échiquier. Le joueur ayant les pièces blanches commence la partie. L objectif de chaque joueur est de placer le roi adverse sous une attaque de telle manière que l adversaire n ait aucun coup légal. On dit que le joueur qui atteint ce but a maté le roi adverse et gagné la partie. Si la position est telle qu aucun des deux joueurs n a la possibilité de mater le roi adverse, la partie est nulle. «L échiquier se compose d une grille 8x8 de 64 cases identiques alternativement claires (les cases blanches ) et foncées (les cases noires ). Au début d une partie, un joueur dispose de 16 pièces claires (les pièces blanches ) et l autre de 16 pièces foncées (les pièces noires ). Ces pièces sont les suivantes : un roi blanc, une dame blanche, deux tours blanches, deux fous blancs, deux cavaliers blancs, huit pions blancs, un roi noir, une dame noire, deux tours noires, deux fous noirs, deux cavaliers noirs, huit pions noirs. «Il y a deux façons différentes de déplacer le roi, soit par un mouvement sur l une des cases adjacentes qui n est pas attaquée par une ou plusieurs pièces adverses soit par le roque. Le roque est un mouvement du roi et de l une ou l autre des tours de la même couleur, sur la première rangée du joueur. Le droit de roquer est perdu (a) si le roi a déjà bougé, ou (b) avec une tour qui a déjà bougé. Le roi est dit en échec, s il est attaqué par une ou plusieurs pièces adverses. «Les huit lignes de cases verticales sont appelées colonnes. Les huit lignes de cases horizontales sont appelées rangées. La position initiale des pièces sur l échiquier est présentée dans la figure qui suit.»[extraits de «Fédération Française des Échecs, Direction nationale de l arbitrage, Règles du jeu et nouveauté FIDE en vigueur au 1er Juillet 2009, Bulletin des Arbitres Fédéraux, numéro 122, Juin 2009.»] Le système que nous modélisons dans ce sujet est un système d enregistrement et d affichage d une partie de Jeu d Échecs. Par conséquent, nous ne nous intéressons pas aux règles de déplacement des pièces, ni au calcul des meilleurs coups à jouer. Les utilisateurs du système sont les joueurs (1) qui enregistrent leurs coups pendant leurs parties et (2) qui déroulent les coups d une partie pour l étudier (du premier coup au dernier coup, en avançant et en revenant en arrière). Un coup est constitué de un ou deux déplacements de pièces. En effet, un joueur déplace une ou deux pièces 1 d une case de départ vers une case d arrivée. Si la pièce déplacée arrive sur une pièce adverse, c est-à-dire de l autre couleur, alors la pièce adverse est capturée et retirée de l échiquier pour le reste de la partie. Pour afficher la partie, les différents types de pièces possèdent chacun un de représentation sur l échiquier. À tout moment de la partie, il est possible de déterminer le joueur le mieux engagé dans la partie (que nous appelons le «joueur gagnant courant») en attribuant une (un nombre de points) à chaque type 1. Deux pièces dans le cas particulier du roque. Télécom SudParis Denis Conan et Christian Bac 7 décembre 2009 CSC4102 2
de pièce autres que le roi : par exemple, une dame vaut 9 points, une tour vaut 5 points, un fou vaut 4 points, un cavalier vaut 3 points et un pion vaut 1 point. À la fin de la partie, les utilisateurs désirent aussi connaître le gagnant. Simplification 1 : nous considérons qu une seule partie est jouée, donc le modèle ne modélise que deux joueurs possédant chacun 16 pièces et un échiquier de 64 cases. Simplification 2 : nous pouvons dans un premier temps ignorer le roque : un coup est alors constitué d un seul déplacement de pièce. Conseil : la formulation du cahier des charges ci-dessus suggère que, pour positionner les pièces sur l échiquier après un coup donné, il est nécessaire de jouer tous les coups depuis le début de la partie. 2 Spécification et conception 2.1 Liste des classes et des attributs Les classes et attributs obtenus après analyse du texte sont les suivants : JeuÉchecs : classe «interface» du système, patron de conception Façade ; Joueur : nom, prénom, gagnant ; chaque joueur possède 16 pièces ; la couleur est promue en classe ; Pièce : capturée ou non ; la couleur est promue en classe ; Tour : en point,, a déjà été déplacée ou non (pour roquer) ; Pion : en point, ; Fou : en point, ; Cavalier : en point, ; Dame : en point, ; Roi :, a déjà été déplacée ou non (pour roquer), en échec ou non, maté ou non ; Échiquier : ; Case : indice de la rangée, indice de la colonne ; Partie : partie jouée à deux joueurs ; Coup : numéro de séquence ; un coup comprend un ou deux déplacements de pièces ; une pièce peut être capturée ; DéplacementPièce : ; un déplacement de pièce concerne une pièce et deux cases (départ et arrivée), il y en a deux maximum dans un coup. 2.2 Diagramme de cas d utilisation La figure suivante présente l acteur et les cas d utilisation du système. Télécom SudParis Denis Conan et Christian Bac 7 décembre 2009 CSC4102 3
Enregistrer un joueur Commencer une partie Enregistrer un coup Commencer l affichage d une partie Afficher un coup Avancer d un coup Joueur Reculer d un coup Afficher le gagnant courant (à un coup donné) Afficher le résultat de la partie Terminer l affichage d une partie 2.3 Diagramme de classes La figure suivante présente le diagramme de classes. JeuÉchecs coupcourant nom prénom /gagnant Joueur joueur pièces noires joueur pièces blanches Partie Coup numérodeséquence 0..1 pièce capturée 0..1 16 DéplacementPièce capturée 1..2 Piece case début 0..1 partie case arrivée Échiquier case départ rangée colonne 64 Case Tour Roi Dame Cavalier aétédéplacée aétédéplacée maté enéchec Fou Pion Télécom SudParis Denis Conan et Christian Bac 7 décembre 2009 CSC4102 4
2.4 Diagramme de machine à états de la classes Pièce La figure suivante présente le diagramme de machine à états de la classe Pièce. EnConstruction NonCapturée entrée : constructeur() destruction de la partie capture par un un joueur adverse EnDestruction entrée : detruire() destruction de la partie Capturée 2.5 Conception détaillée de la classe Pièce : liste des attributs couleur : @Couleur capturédanscoup : @Coup jouédanscoups : Collection de @DéplacementPièce capturée : booléen 2.6 Diagramme de communications ou de séquence Voici le diagramme de séquence qui correspond au cas d utilisation : «enregistrer un coup». Le prototype de l opération correspondant est le suivant : enregistrercoup(@pièce p, @Case départ, @Case arrivée, @Pièce capturée), avec capturée qui peut être null. Si nous ne choisissons pas d utiliser la simplification 2, c est-à-dire nous ignorons le roque, le prototype de l opération enregistrercoup() comprend une seconde référence sur une Pièce ainsi que deux références supplémentaires pour les Cases de départ et d arrivée de la seconde pièce déplacée dans le coup, ces trois références étant null dans les coups standards sans roque. Pour simplifier la question, nous ignorons le fait d indiquer si le roi est en échec ou maté suite au déplacement des pièces. La description informelle du cas d utilisation est la suivante : appel de l opération enregistrercoup() sur l objet de la classe JeuÉchecs, création de l objet Coup, si @Pièce capturée non null, création de l instance d association vers la pièce capturée création du premier déplacement création de l instance d association vers la pièce déplacée création des deux instances d association vers les cases de départ et d arrivée si roque, création du second déplacement création de l instance d association vers la pièce déplacée création des deux instances d association vers les cases de départ et d arrivée Télécom SudParis Denis Conan et Christian Bac 7 décembre 2009 CSC4102 5
:JeuÉchecs <<new>> :Partie cc:coup cap:pièce <<new>> :DéplacementPièce enregistrercoup(p,cd,da,cap,p2,cd2,ca2) nouveaucoup(p,cd,ca,cap,p2,cd2,ca2) <<create(p,cd,ca,cap,p2,cd2,ca2)>> opt [cap!=null] capturer() <<create(p,cd,ca)>> déplacer() déplacerdépart() déplacerarrivée() opt [p2!=null && cd2!=null && ca2!=null && cap!=roi] <<create(p2,cd2,ca2)>> <<new>> :DéplacementPièce déplacer() déplacerdépart() déplacerarrivée() p:pièce p2:pièce cd:case ca:case cd2:case ca2:case Télécom SudParis Denis Conan et Christian Bac 7 décembre 2009 CSC4102 6