User Tools

Site Tools


2013_2014:s2:td:etudedecas:etape2

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
2013_2014:s2:td:etudedecas:etape2 [2014/05/01 21:30]
blay [Retour sur l'interface de Match]
2013_2014:s2:td:etudedecas:etape2 [2014/05/21 18:59] (current)
blay [Des codes fonctionnels]
Line 16: Line 16:
 Voici le modèle qui décrit les classes ''​FencingPiste''​ et ''​MatchInterface''​. Voici le modèle qui décrit les classes ''​FencingPiste''​ et ''​MatchInterface''​.
 {{ :​2013_2014:​s2:​td:​etudedecas:​fencingpiste.png?​nolink |}} {{ :​2013_2014:​s2:​td:​etudedecas:​fencingpiste.png?​nolink |}}
- 
-Voici le {{:​2013_2014:​s2:​td:​etudedecas:​pistepk.jar|.jar}} 
  
 Voici les javadoc (tronqués pour cause de problèmes de chargement de fichier html dans cet environnement). Voici les javadoc (tronqués pour cause de problèmes de chargement de fichier html dans cet environnement).
Line 23: Line 21:
    * {{:​2013_2014:​s2:​td:​etudedecas:​matchinterface.html|}}    * {{:​2013_2014:​s2:​td:​etudedecas:​matchinterface.html|}}
  
-{{:​2013_2014:​s2:​td:​etudedecas:​pistepk.zip| Archive des codes livrés}} 
  
 +<box round rgb(185,​211,​238) rgb(220,​226,​255) 95%|A Faire :  >
 +  * Comprenez brièvement ces modèles et les interfaces
 +  * Pour exécuter les codes : 
 +        * Soit sous JCreator en récupérant {{:​2013_2014:​s2:​td:​etudedecas:​escrimes2t2014.zip|l'​archive}} puis   ​[[2013_2014:​s2:​td:​etudedecas:​etape2:​Jcreator|constuire un projet JCreator]]
 +        * Soit "à la main" ​
 +          - Sauvegarder le {{:​2013_2014:​s2:​td:​etudedecas:​pistepk.jar|.jar}} dans un répertoire.
 +          - Sauvegarder le {{:​2013_2014:​s2:​td:​etudedecas:​testpk.zip|.zip}} (exemple simple d'​utilisation) dans le même répertoire.
 +          - De-ziper le fichier d'​exemple : unzip testPK.zip si besoin mais un double clique devrait suffire.
 +          - Compilation de l'​implémentation de l'​interface : 
 +                 * ''​javac -cp pistePK.jar pistePK/​testPK/​Match1.java''​ ((On pourrait faire mieux en sauvegardant les fichiers .class dans un autre répertoire,​ nous visons simplement à vous conduire à comprendre les codes.))
 +           ​- ​ Compilation de la classe principale de test : 
 +                * ''​javac -cp .:​pistePK.jar pistePK/​testPK/​TestPist.java ''​
 +           ​- ​ Exécution de la classe principale de test : 
 +               * ''​java -cp .:​pistePK.jar pistePK.testPK.TestPist'' ​
 +      * Chaque interface représente une machine. Dès qu'il y a une différence de 5 points entre 2 joueurs dans les 3 minutes, le joueur qui a le plus marqué a gagné. Puis pendant 2mn c'est le premier qui touche qui gagne. Enfin s'il y a toujours égalité, au validate, on tire au sort. ...  Pour modifier le nombre de points, comme nous n'​avons pas la machine réelle, c'est vous qui cliquez sur addPoint.
 +          * Quand l'​arbitre pense que c'est ok, il clique sur //​Validate//​. (Ne pas oublier de relancer le chrono si besoin).
 +          * Quand le round est terminé, par //next//, l'​arbitre passe au round suivant. Chaque match se compose de 3 rounds.
 +          * Quand il n'y a plus de matchs, la "​table"​ se met en attente.
 +  * puis passez aux exercices suivants.
 +</​box>​
  
-Voici un exemple très basique d'​utilisation de ces classes et interfaces.+{{:​2013_2014:​s2:​td:​etudedecas:​pistepk.zip| Archive des codes livrés}}
  
-{{:​2013_2014:​s2:​td:​etudedecas:​match1.java|}} +{{:​2013_2014:​s2:​td:​etudedecas:​piste.zip|Certains étudiants travaillent à présent avec eclipse, alors voici les codes sous forme d’archive de projet Eclipse en 1.6.}}
-{{:​2013_2014:​s2:​td:​etudedecas:​testpist.java|}}+
  
-<box round rgb(185,​211,​238) rgb(220,​226,​255) 95%|A Faire :  > 
-Comprenez brièvement ces codes puis passez aux exercices suivants. 
-</​box>​ 
 ==== Retour sur l'​interface de Match ==== ==== Retour sur l'​interface de Match ====
  
Line 75: Line 88:
 </​code>​ </​code>​
  
-Votre code ne correspond probablement pas exactement à l'​interface de ''​MatchInterface''​.+ 
 + 
 +Votre code ne correspond probablement pas exactement à l'​interface de ''​MatchInterface''​.Vous manipulez par exemple probablement des joueurs alors qu'ici seul le nom du joueur est demandé et utilisé! Cela ne signifie pas que vous devez changer le principe de votre classe mais que vous devez ajouter et implémenter les méthodes exigées par l'​interface.
  
 Vous devez donc adapter** VOTRE CODE** (et pas l'​inverse,​ en général, on n'a pas le droit de modifier les codes fournis) pour qu'il implémente l'​interface ''​MatchInterface''​. Vous devez donc adapter** VOTRE CODE** (et pas l'​inverse,​ en général, on n'a pas le droit de modifier les codes fournis) pour qu'il implémente l'​interface ''​MatchInterface''​.
Line 83: Line 98:
 public class Match implements MatchInterface { public class Match implements MatchInterface {
 </​code>​ </​code>​
 +//Rappel : une classe qui implémente une interface doit implémenter toutes les méthodes définies par l'​interface.//​
  
 <box round rgb(185,​211,​238) rgb(220,​226,​255) 95%|A Faire :  > <box round rgb(185,​211,​238) rgb(220,​226,​255) 95%|A Faire :  >
Line 88: Line 104:
   * Tester là.   * Tester là.
 </​box>​ </​box>​
 +
 +
 ==== Approche incrémentale ==== ==== Approche incrémentale ====
-  - Vous commencerez par créer une piste et tester 
-  - Par exemple 
  
-<code java> +Votre objectif est de faire en sorte que que le code écrit ​à la dernière séance fasse maintenant référence aux machines qui vous ont été fournis
-  FencingPiste pist1 = new FencingPiste(1);​ + 
-  FencingPiste pist2 = new FencingPiste(2);​ +<box round rgb(185,211,238rgb(220,226,25595%|A Faire :  > 
-  Match m1 = new Match();//​attention ​à bien mettre vos propres parametres dans les constructeurs et votre propre type "​Match"​ +  - Commencez par créer une piste et tester pour être sûr que vous allez savoir l'​intégrer dans votre propre algorithme
-  Match m2 = new Match(); +  - Par exemple, vous pouvez reprendre ​les codes de tests fournis à l'étape 1 du TD, Test.
-  Match m3 = new Match(); +</box> 
-  +
-  pist1.addMatch(m1);​ +
-  ​pist1.addMatch(m2);​ +
-  ​pist2.addMatch(m3)+
-  +
-  pist1.start()+
-  pist2.start();​ +
-  +
-  ​while (!(pist1.isOver() && pist2.isOver()) ​ ) { +
- Thread.sleep(6000);​ +
- System.out.println("​pas fini-------------------"​);​ +
-  } +
-  +
-  System.out.println("​gagnant de m1" + m1.getWinner());​ +
-  ​System.out.println("​gagnant de m2" + m2.getWinner());​  +
-  System.out.println("​gagnant de m3" + m3.getWinner());​  +
-  +
-/* +
- * Quand tous les matchs ont eu lieu sur toutes les pistes on re-initialise ​les match +
- * puis on ré-affecte les pistes. +
- * On ferme les pistes inutiles +
- */ +
- ​pist1.clear();​ +
- ​Match1 m4 = new Match1(); +
- ​pist1.addMatch(m4);​ +
- ​pist1.start();​ +
-// On ferme l'autre piste +
- pist2.close(); +
-</code>+
  
 ==== Intégration : Lancement d'une compétition ==== ==== Intégration : Lancement d'une compétition ====
    
 +<box round rgb(185,​211,​238) rgb(220,​226,​255) 95%|A Faire :  >
 Vous avez modélisé la semaine dernière une compétition. Vous avez modélisé la semaine dernière une compétition.
 Vous devez à présent connecter une compétition aux pistes. Vous devez à présent connecter une compétition aux pistes.
Line 135: Line 124:
  
  
-Amusez vous  +Amusez vous ! 
-===== Principes des codes donnés ===== +</box>
- +
-Diagramme de composants +
- +
-Mettre en avant  +
-1) diagramme de classes +
- +
-2)  +
- +
-3) Diagramme de séquence qui dit ce que vous devez faire +
- +
- +
-==== Questions ==== +
-  +
- +
-- où se trouve les codes qui valide une fin de match ((MachineControler)) ?  +
- +
-- Quel code devez vous modifier pour implémenter la validation conformément aux règles ci-après ? +
- +
-- De quelles informations disposez-vous pour faire ces calculs?  +
- +
- +
- +
- +
-===== A vous de modifier les codes  ===== +
- +
-Règles de validation +
- +
-- Implémenter les rgles ci-après +
- +
-- Vérifier que les jeux de données correspondent bien +
- +
-Faire un tableau +
- +
-Joueur1 Joueur2 ScoreJoueur1 ScoreJoueur2 Temps Résultat +
- +
- +
-Voici un jeu de tests +
- +
-<code java> +
-public class MachineControllerTest { +
- public static final int THREE_MINUTES = 1000 * 60 * 3; +
- public static final int TWO_MINUTES = 1000 * 60 * 2; +
- public static final int ONE_MINUTE = 1000 * 60 ; +
- Score sleft = new Score(PlayerType.left);​ +
- Score sright = new Score(PlayerType.right);​  +
- MachineController mc = new MachineController();​ +
- StateMachine stateMachineOnChrono = new StateMachine(sleft,​sright,​ THREE_MINUTES);​ +
- StateMachine stateMachineOnPoints= new StateMachine(sleft,​sright,​ 360); +
-  +
-/* Des que un des joueurs a fait 5 touches et s'il y a une différence de au moins 1 touches entre les deux joueurs  +
- alors il est déclaré gagnant +
- Par exemple un score de 5 pour l'un et de 3 pour l'​autre +
- mais aussi 7 et 5 +
- par contre 5 et 4 ne suffisent pas. +
-*/  +
- @Test +
- public void testValidateOnScoreForLeft() { +
- sleft.setScore(5);​ +
- sright.setScore(3);​ +
- assertEquals(PlayerType.left,​ mc.validate(stateMachineOnPoints));​ +
-+
- @Test +
- public void testValidateOnScoreForRight() { +
- sright.setScore(5);​ +
- sleft.setScore(3);​ +
- assertEquals(PlayerType.right,​ mc.validate(stateMachineOnPoints));​ +
-+
-  +
- @Test +
- public void testValidateFailOnScoreGap() { +
- sleft.setScore(5);​ +
- sright.setScore(4);​ +
- assertEquals(PlayerType.fail,​ mc.validate(stateMachineOnPoints));​ +
-+
-  +
- @Test +
- public void testValidateFailOnScoreLevel() { +
- sleft.setScore(4);​ +
- sright.setScore(2);​ +
- assertEquals(PlayerType.fail,​ mc.validate(stateMachineOnPoints));​ +
-+
-  +
-  +
- +
- // VERSION SIMPLIFIEE  +
- // Si aucun des joueurs n'a marqué 5 touches mais que les 3 minutes sont écoulées alors celui qui a fait le plus de touches est déclaré gagnant du round. +
- // Si les deux ont le même score, le jeux doit se prolonger 2minutes.  +
- // Des que l'un des joueurs touche, il gagne. +
- // AU bout de 5minute, le gagnant est tiré au sort. +
-  +
- @Test +
- public void testValidateOnChronoLeft() { +
- sleft.setScore(4);​ +
- sright.setScore(2);​ +
- assertEquals(PlayerType.left,​ mc.validate(stateMachineOnChrono));​ +
-+
-  +
- @Test +
- public void testValidateOnChronoRight() { +
- sleft.setScore(1);​ +
- sright.setScore(2);​ +
- stateMachineOnChrono.setClockTime(THREE_MINUTES ); +
- assertEquals(PlayerType.right,​ mc.validate(stateMachineOnChrono));​ +
-+
-  +
- @Test +
- public void testValidateFailOnChrono() { +
- sleft.setScore(2);​ +
- sright.setScore(2);​ +
- stateMachineOnChrono.setClockTime(THREE_MINUTES + ONE_MINUTE);​ +
- assertEquals(PlayerType.fail,​ mc.validate(stateMachineOnChrono));​ +
-+
-  +
- @Test +
- public void testValidateRandomOnChrono() {  +
- sleft.setScore(2);​ +
- sright.setScore(2);​ +
- stateMachineOnChrono.setClockTime(THREE_MINUTES + TWO_MINUTES);​ +
- assertFalse(PlayerType.fail.equals( mc.validate(stateMachineOnChrono)));​ +
-+
-  +
- +
-</code> +
-===== Amorçons la suite  ===== +
- +
-Cette fois-ci vous allez devoir utiliser vos propres capacités à modéliser. +
- +
-Notre premier objectif est d'​implémenter la méthode next.+
  
-IL s'agit de : 
-- gérer une liste de rounds ​ 
-- prendre le prochain round affecté à cette table 
  
  
-EXtension : a chaque round, les joueurs changent de côté. 
2013_2014/s2/td/etudedecas/etape2.1398972658.txt.gz · Last modified: 2014/05/01 21:30 by blay