Vous êtes sur la page 1sur 8

Corrigé Barème

Institut Télécom, Télécom SudParis, 2è année


CSC4002 : Introduction à la conception et à la programmation orientées
objet
Contrôle de connaissances : Bureau d’Études

Date : 7 Décembre 2009 Durée : 1H30mn


Coordonnateurs : Denis Conan et Christian Bac

Notes en préambule :
— les seuls documents autorisés sont ceux distribués en cours et ceux mis à disposition sur le site Web ;
— le travail doit se faire individuellement ;
— n’oubliez pas d’indiquer votre nom sur chaque feuille rendue ;
— soyez concis et précis, et justifiez vos réponses par des commentaires appropriés ;
— soyez rigoureux dans la syntaxe UML ;
— veillez à rendre une copie propre et lisible.
1 Sujet
« 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 “blan-
ches”) 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. »]
BE noté 2009–2010

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 icone 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 valeur (un nombre de points) à chaque type
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. Nous vous laissons choisir d’inclure ou non le roque dans votre solution et vous
demandons donc d’indiquer explicitement votre choix.

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 Questions
Question 1 : 2pt Après avoir réalisé une analyse du texte au brouillon, ce qui vous a permis de trouver
les noms (substantifs) et les verbes correspondant à ce problème, choisir les classes qui vous semblent devoir
faire partie de la modélisation de ce problème. Décrire textuellement ces classes et les attributs associés à
chaque classe (donner le nom des classes, le nom de leurs attributs et des explications textuelles uniquement
quand cela vous semble nécessaire).
Réponse :
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 : — valeur en point, icone, a déjà été déplacée ou non (pour roquer) — ;
— Pion : — valeur en point, icone — ;
— Fou : — valeur en point, icone — ;
— Cavalier : — valeur en point, icone — ;
— Dame : — valeur en point, icone — ;
— Roi : — icone, 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 ;
Erreurs fréquemment observées :
— ne pas faire apparaître une généralisation/spécialisation pour les pièces,
— association comme attribut,
— attribut dérivé (p.ex. Gagnant) comme classe.
Variantes possibles :
— ne pas faire apparaître de classe Échiquier,
— ne pas faire apparaître la classe DéplacementPièce mais fusionner Coup et DéplacementPièce dans le cas sans
roque,
1. Deux pièces dans le cas particulier du roque.

Télécom SudParis — Denis Conan et Christian Bac — 7 Décembre 2009 — CSC4002 2


BE noté 2009–2010

— faire apparaître une classe Rangée et une classe Colonne,


— faire apparaître une classe Couleur,
— un Coup possède comme attribut CaseArrivée, CaseDépart et PièceBougée.

Barème de correction sur 2 points :


Répartition :
0,5 classe Joueur
0,5 classe Partie
0,5 classe Coup
0,5 classe Case
0,5 les attributs de valeur en point, icone, et capturée ou non des
classes Pièce et des classes enfants de la classe
Pièce; ne pas pénaliser si tous ces attributs sont dans la
classe correspondant à la classe Pièce
0.5 bonus pour le numéro de coup (pour les ordonner)

Question 2 : 3pt Décrire les acteurs et les opérations significatives du système par un diagramme de cas
d’utilisation.
Réponse :
La figure suivante présente l’acteur et les cas d’utilisation du système.

Enregistrer un joueur

Commencer une partie

Enregistrer un coup

Commencer l’affichage d’une partie

Afficher un coup

Avancer d’un coup

Reculer d’un coup


Joueur Afficher le gagnant courant
(à un coup donné)

Afficher le résultat de la partie

Terminer l’affichage d’une partie

Erreurs fréquemment observées :


— les cas d’utilisation uniquement pour jouer ou uniquement pour afficher,
— des cas d’utilisation supplémentaires pour gérer plusieurs parties dans le système,
— plusieurs acteurs mis de manière artificiels.
Variantes possibles :
— d’autres cas d’utilisation de gestion du système tel que des statistiques,
— ne pas considérer les deux derniers cas d’utilisation qui ne sont pas cités explicitement dans l’énoncé.

Barème de correction sur 3 points :


Répartition :
0,5 respect de la notation UML (délimitation du système, icone de
l’acteur, lien de communication, phrase verbale, cadre ovale autour
des cas d’utilisation)
0,5 un acteur
0,5 des cas d’utilisation pour jouer un coup

Télécom SudParis — Denis Conan et Christian Bac — 7 Décembre 2009 — CSC4002 3


BE noté 2009–2010

0,5 des cas d’utilisation pour afficher un coup


max 1 : - 0,5 ce qu’il faut pour commencer le suivi et l’affichage d’une partie
- 0,5 ce qu’il faut pour avancer et reculer d’un coup
- 0,5 ce qu’il faut pour afficher le gagnant
- 0,5 ce qu’il faut pour commencer une partie
- 0,5 ce qu’il faut pour jouer un coup

Question 3 : 5pt Construire un diagramme de classes qui représente le système. Dans ce diagramme,
prenez soin de préciser les noms des associations, les rôles, les multiplicités et les sens de navigation des
associations lorsque cela s’avère nécessaire.
Réponse :
La figure suivante présente le diagramme de classes proposé en guise de corrigé-type.
JeuÉchecs
coupCourant

joueur
pièces
noires
Joueur Partie
joueur
nom pièces
prénom blanches
/gagnant *
Coup Échiquier
numéroDeSéquence
0..1

1..2
*
DéplacementPièce
case départ
*
*
arrivée
case

64

pièce capturée
Case
case
0..1 début rangée
16 0..1 partie
colonne
Piece
capturée

Tour Roi Dame Cavalier


aÉtéDéplacée aÉtéDéplacée
icone icone
icone maté
valeur valeur
valeur enÉchec
icone

Fou Pion
icone icone
valeur valeur

Erreurs fréquemment observées :


— oublier d’avoir une classe d’accès aux éléments du système : c’est la classe « Façade » JeuÉchecs,
— oublier la classe DéplacementPièce,
— oublier la généralisation spécialisation entre la classe Pièce et les différents types de pièces,
— oublier les associations entre les classes Pièce, DéplacementPièce et Case,
— oublier l’association entre les classes Coup et Pièce pour la pièce capturée dans le coup,
— erreur dans les multiplicités, par exemple dans le nombre de pièces possédées par un joueur ou encore le nombre
de pièces jouées lors un coup.
Variantes possibles :
— toute autre solution par exemple n’ayant pas suivi le conseil et considérant qu’un échiquier différent est dessiné
pour chaque coup, ou ayant décrit un coup comme l’adjonction d’une case de départ, d’une case de d’arrivée,
d’une pièce jouée et d’une pièce capturée,

Télécom SudParis — Denis Conan et Christian Bac — 7 Décembre 2009 — CSC4002 4


BE noté 2009–2010

— complexifier le diagramme pour gérer plusieurs parties,


— faire apparaître une classe Couleur,
— dans le cas de la simplication sans roque, ne pas distinguer les classes Coup et DéplacementPièce,
— ne pas faire apparaître de classe Échiquier,
— ne pas faire apparaître l’association pour le coupCourant (elle sert dans la dernière question),
— préférer mettre 5 associations entre la classe Joueur et les classes enfants de la classe Pièce,
— utiliser des classes d’association DéplacementPièce entre les classes Pièces et Case,
— ne considérer qu’un seul déplacement par coup, c’est-à-dire ignorer le roque,
— une association entre les classes Coup et Joueur (dans le corrigé type, le joueur qui joue est connu en analysant
les déplacements de pièces),
— ne pas faire apparaître la classe Couleur mais utiliser des attributs dans les classes Joueur et Pièce,

Barème de correction sur 5 points :


Répartition :
Au maximum 5 points
1 pas d’erreur de notation UML
(classe, nom association, généralisation spécialisation, agrégation, etc.)
1 la plupart des multiplicités sont correctes (1 erreur tolérée)
0,5 la classe du patron Façade JeuÉchecs
0,5 la classe Pièce, si possible avec ses classes enfants
0,5 les classes Partie et/ou Coup
0,5 les classes Échiquier et/ou Case
0,5 l’association pour la capture
0,5 la ou les associations représentant le déplacement (selon cas avec ou sans roque)
0,5 l’association pour le coup courant (bonus)
0,5 l’association pour le placement des pièces en début de partie (bonus)

Question 4 : 3pt Construire le diagramme de machines à états de la classe qui permet de décrire les
pièces du jeu d’échecs.
Réponse :
La figure suivante présente le diagramme de machine à états de la classe Pièce.

EnConstruction NonCapturée

entrée : constructeur()
un joueur adverse
capture par un

ie
art
e la p
nd
ctio
tru
des

EnDestruction destruction de la partie Capturée


entrée : detruire()

Erreurs fréquemment observées :


— mettre toute la logique de la classe Roi alors que l’on ne demande que la machine à états de la classe générique
Pièce,
— état qui ne permet pas d’aller vers l’état final.
Variantes possibles :
— pas d’états de transition « EnConstruction » et « EnDestruction ».

Barème de correction sur 3 points :


Répartition :
1 respect de la notation UML (boîte, flèches, événement[condition]/action)
+ respect de la présence état initial et état final, et absence
d’état ne permettant pas d’aller vers l’état final

Télécom SudParis — Denis Conan et Christian Bac — 7 Décembre 2009 — CSC4002 5


BE noté 2009–2010

1 présence états Capturée


1 transitions avec événement de capture et événement de fin de partie

Question 5 : 2pt On s’intéresse à la classe qui permet de décrire une pièce. Donner tous les attributs
de cette classe (vous ferez figurer le nom des attributs, le type de ces attributs ainsi que la visibilité de ces
attributs).
Réponse :

− couleur : @Couleur
− capturéDansCoup : @Coup
− jouéDansCoups : Collection de @DéplacementPièce
− capturée : booléen
Erreurs fréquemment observées :
— non conforme au diagramme de classes, notamment par rapport aux navigations,
— attributs non privés,
— oubli de la collection pour traduire la multiplicité « * »,
— oubli de l’attribut « capturée »
Variantes possibles :
— selon le diagramme de classe.

Barème de correction sur 2 points :


Répartition :
0,5 visibilité privée
0,5 conformité avec le bon nombre d’association du diagramme de classes
0,5 conformité avec les multiplicités du diagramme de classes
0,25 conformité avec les navigabilités du diagramme de classes
0,25 attribut capturé ou autres du diagramme de classes

Question 6 : 5pt Donner le diagramme de communications ou de séquence qui correspond au cas d’uti-
lisation : « enregistrer un coup ». Le prototype de l’opération correspondant est le suivant : enregistrer-
Coup(@Pièce p, @Case départ, @Case arrivée, @Pièce capturée), avec capturée qui peut être null.
Pour ceux qui n’ont pas choisi d’utiliser la simplification 2, c’est-à-dire d’ignorer 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.
Vous pouvez détailler les actions correspondant à ce cas d’utilisation sous forme textuelle avant de réaliser
le diagramme.
Réponse :
La figure suivante présente le diagramme de séquence associé au cas d’utilisation « enregistrer un coup ». 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 — CSC4002 6


BE noté 2009–2010

<<new>> <<new>>
:JeuÉchecs :Partie cc:Coup cap:Pièce :DéplacementPièce p:Pièce cd:Case ca:Case

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]

<<new>>
:DéplacementPièce p2:Pièce cd2:Case ca2:Case
<<create(p2,cd2,ca2)>>
déplacer()
déplacerDépart()
déplacerArrivée()

Télécom SudParis — Denis Conan et Christian Bac — 7 Décembre 2009 — CSC4002


7
BE noté 2009–2010

Erreurs fréquemment observées :


— non-respect du séquencement ou des numérotations,
— non-respect de la notation UML : objet, etc.,
— pas de test de valeurs retournées ou pas d’utilisation des valeurs retournées,
— pas de fragment avec condition ou pas de condition sur les messages,
— non respect des liens du diagramme de classes.
Variantes possibles :
— diagramme de communications,
— autre expression selon le diagramme de classes.

Barème de correction sur 5 points :


Répartition :
1,5 logique correcte, même si seulement exprimée dans l’explication
textuelle;
1 respect de la notation UML (objet, classe, condition, fragment, etc.)
1 conformité au diagramme de classes (parcours d’associations
existantes et navigabilité possible)
0.5 création de l’objet Coup
0.5 condition sur la capture
0.5 appels au déplacement sur la pièce
0.5 appels aux déplacements sur la case (cas sans roque) ou les deux cases

Télécom SudParis — Denis Conan et Christian Bac — 7 Décembre 2009 — CSC4002 8