cours0708/G5a/Solutions/Robot/robo_corrige.htm

250 lines
6.4 KiB
HTML
Raw Permalink Normal View History

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Language" content="fr">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>ROBOT-2</title>
</head>
<body>
<span style="font-family: Arial;">
<h1>La guerre des robots<br>
</h1>
<h2>Solution :&nbsp;</h2>
<h3>Diagramme de classes d'analyse</h3>
<p><img style="border: 0px solid ;" alt="DCA Robot" src="RoboA.jpg"></p>
Quelques remarques :
<br>
<ul>
<li>On pourrait
regrouper en une
seule classe Equipe et Base puisqu'elles sont en relation 1--1 ; les
concepts &eacute;tant diff&eacute;rents, j'ai toutefois choisi
de les
s&eacute;parer, cela permettrait une r&eacute;utilisation plus
rapide
si on d&eacute;cidait qu'une &eacute;quipe peut avoir plusieurs
bases</li>
<li><font face="Arial">La couleur est maintenant
un attribut de
l'&eacute;quipe (cf &eacute;nonc&eacute;)<br>
</font></li>
<li><font face="Arial">get_distancePerception est
abstraite dans
Robot et red&eacute;finie dans les sous-classes car la distance de
perception n'est connue que ds ces sous-classes ; au contraire,
"percevoir" est concr&egrave;te dans Robot car on peut y produire
tout
l'algorithme en faisant appel &agrave; getDistancePerception, elle
retourne un Vector d'Objets des objets per&ccedil;us (Obstacles,
robots, bases)</font></li>
<li><font face="Arial">getCouleur&nbsp; est
concr&egrave;te dans
"Robot" puisque son algorithme ne d&eacute;pend pas des
sous-classes,
il ne d&eacute;pend que de l'&eacute;quipe ( =
getEquipe().getCouleur()&nbsp; ) ; en revanche, elle est abstraite
dans
Objet &agrave; cause de Obstacle<br>
</font></li>
<li><font face="Arial">Comme d'habitude, les
attributs communs
&agrave; toutes les instances d'une classe sont
pr&eacute;fix&eacute;s&nbsp; c_ et static
(soulign&eacute;)&nbsp;</font></li>
<li><font face="Arial">La classe Simulation est un
singleton car elle
n'a qu'une instance (le jeu en cours) et toutes ses
op&eacute;rations
sont collectives<br>
</font></li>
<li><font face="Arial">recevoirTir est une
op&eacute;ration abstraite
de Objet qui est red&eacute;finie dans tous les types d'objets
susceptibles de recevoir des tirs de foreuses ; son algorithme devra
d&eacute;tailler ce qui se passe alors (p.ex.
d&eacute;cr&eacute;menter
la solidit&eacute; d'une valeur proportionnelle &agrave; la
puissance
du tir, mais on pourrait aussi complexifier le jeu en tirant
al&eacute;atoirement une avarie comme par ex. diminuer la distance
de
perception ou la charge max ). RQ : L'&eacute;nonc&eacute; ne
dit rien
du tir sur une base : on pourrait la red&eacute;finir en une
op&eacute;ration vide.</font></li>
<li><font face="Arial">"ajouter un nouveau robot"
donne naissance
&agrave; 2 m&eacute;thodes diff&eacute;rentes selon qu'il
s'agit d'une
foreuse ou d'un porteur (les param&egrave;tres sont
diff&eacute;rents
aussi)</font></li>
</ul>
<h3>Conception :</h3>
<ul>
<li>Faites le diagramme de conception, ajoutez une classe "IHM"
qui
servira d'interface entre l'utilisateur et le syst&egrave;me</li>
</ul>
<p><font face="Arial">
Quelques remarques :&nbsp;</font></p>
<ul>
<li><font face="Arial">Rappel : Dans un DCC les
relations sans
fl&egrave;ches sont des relations bi-orient&eacute;es</font></li>
<li><font face="Arial">Alors qu'un diagramme
d'analyse
pr&eacute;sente peu de variations possibles,&nbsp; il y a
souvent,&nbsp; au contraire, de nombreux choix de conception
possibles
avec des avantages et des inconv&eacute;nients : Ici par exemple,
on
pourrait choisir de mettre un gestionnaire d'instances sur chaque type
d'objet : obstacle, &eacute;quipe, chaque &eacute;quipe
g&eacute;rant
les instances de ses robots, ("Base" &eacute;tant li&eacute;e
&agrave;
"&Eacute;quipe" en 1..1 elle n'a pas absolument besoin d'une
gestion
propre), ceci conduit &agrave; orienter les relations des
gestionnaires
vers leurs objets.</font></li>
</ul>
<p><img src="roboC_autre.jpg" border="0" height="437" width="915"></p>
<ul>
<li><font face="Arial">Je n'ai pas retenu cette
solution, j'ai choisi
de faire de "Simulation" un super-gestionnaire d'instances de tous les
objets car c'est lui de toutes fa&ccedil;ons qui devra "donner vie"
&agrave; chaque objet en fonction de son type et qui devra
d&eacute;cider du type d'objet qui se trouve en (x,y) lors de la
perception par exemple (d'o&ugrave; le "getType" abstrait de
"Objet") <br>
</font></li>
<li><font face="Arial">Les relations sont
orient&eacute;es dans le
sens strictement n&eacute;cessaire pour une bonne
r&eacute;utilisation
p.ex : orienter de Base vers Equipe et non l'inverse permet
d'&eacute;voluer facilement vers une solution "plusieurs bases par
&eacute;quipe"<br>
</font></li>
</ul>
<p><img src="RoboC.jpg" border="0" height="735" width="915"></p>
&nbsp;
<ul>
<li>Faites un diagramme de s&eacute;quences (cf chapitre 4)
pour
chacune des requ&ecirc;tes suivantes :
<ul>
<li>Recharger d'une quantit&eacute; e les batteries du
robot
N&deg;7 de l'&eacute;quipe "rouge" </li>
</ul>
<p>NB : Les 3 param&egrave;tres de la requ&ecirc;te
sont :&nbsp;
num&eacute;ro et couleur du robot consid&eacute;r&eacute;
et
&eacute;nergie &agrave; recharger mais sur le diagramme de
s&eacute;quence, tous les param&egrave;tres apparaissent
toujours comme
"x"&nbsp;</p>
<p><img src="DSeq1.jpg" border="0" height="714" width="749"></p>
<p>&nbsp; </p>
<ul>
<li>Quel est le type (foreuse ou porteur),
l'&eacute;quipe et le
niveau d'&eacute;nergie du robot situ&eacute; en x,y ? (on
supposera
qu'il n'y en a qu'un)</li>
</ul>
<p><img src="DSeq2.jpg" border="0" height="794" width="707"></p>
<p>&nbsp; </p>
<ul>
<li>Ajouter un nouveau robot &agrave;&nbsp; la
simulation (avec
ses param&egrave;tres de construction), on supposera qu'il s'agit
d'un
porteur</li>
</ul>
<p><img src="DSeq3.jpg" border="0" height="674" width="1082"></p>
&nbsp; </li>
<li>Afficher l'&eacute;quipe gagnante : son nom, sa
couleur, sa
quantit&eacute; de minerai et le nombre de foreuses qui y sont
rattach&eacute;es</li>
</ul>
<p><img src="DSeq4.jpg" border="0" height="794" width="790"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
</span>
</body>
</html>