2013_2014:s2:td:etudedecas:etape1
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
2013_2014:s2:td:etudedecas:etape1 [2014/04/29 20:12] – [Faire] blay | 2013_2014:s2:td:etudedecas:etape1 [2014/05/21 14:22] (current) – blay | ||
---|---|---|---|
Line 6: | Line 6: | ||
- | <note important> | + | <note important> |
+ | |||
+ | |||
+ | ===== Objectifs de notre logiciel ===== | ||
Nous avons besoin d'un logiciel qui nous permette de gérer les compétitions mettant en jeu la machine qui est fournie. | Nous avons besoin d'un logiciel qui nous permette de gérer les compétitions mettant en jeu la machine qui est fournie. | ||
Ainsi nous aimerions : | Ainsi nous aimerions : | ||
- | * qu'un manager puisse déclarer de nouvelles compétitions, | + | * qu'un manager puisse déclarer de nouvelles compétitions; |
- | * qu'il puisse gérer les matchs pendant la compétition, | + | * qu'il puisse gérer les matchs pendant la compétition, |
* Sur ce dernier point, il s'agit de permettre à un consultant de consulter pour un joueur au cours de la compétition les matchs joués ou à jouer et les scores obtenus. | * Sur ce dernier point, il s'agit de permettre à un consultant de consulter pour un joueur au cours de la compétition les matchs joués ou à jouer et les scores obtenus. | ||
Line 30: | Line 34: | ||
Une compétition se déroule ainsi ((Il s'agit d'une approximation afin de simplifier un peu l' | Une compétition se déroule ainsi ((Il s'agit d'une approximation afin de simplifier un peu l' | ||
- | - Elle est créée | + | - Elle est créée. |
- Les joueurs absents sont considérés comme forfait. | - Les joueurs absents sont considérés comme forfait. | ||
- | - Les matchs sont calculés en fonction du nombre de joueurs et leur rang | + | - Les matchs sont calculés en fonction du nombre de joueurs et de leur rang |
- | - les matchs sont distibués | + | - les matchs sont distribués |
- les pistes sont " | - les pistes sont " | ||
- Dès que toutes les pistes ont terminé, | - Dès que toutes les pistes ont terminé, | ||
+ | - On affiche les gagnants de chaque match, | ||
- Tant qu'il y a encore des tours à faire (c'est à dire que le gagnant de la compétition n'a pas été déterminé) | - Tant qu'il y a encore des tours à faire (c'est à dire que le gagnant de la compétition n'a pas été déterminé) | ||
- on calcule une nouvelle série de matchs en fonction des gagnants du **tour** précédent | - on calcule une nouvelle série de matchs en fonction des gagnants du **tour** précédent | ||
- On ré-initialise les pistes avec les nouveaux matchs | - On ré-initialise les pistes avec les nouveaux matchs | ||
- | - on ferme les pistes devenues inutiles | + | - on ferme les pistes devenues inutiles. |
- On lance les pistes | - On lance les pistes | ||
- etc. | - etc. | ||
Line 47: | Line 52: | ||
<box round rgb(185, | <box round rgb(185, | ||
- | * Construire le diagramme de séquence de niveau analyse correspondant. Faîtes apparaître les " | + | * Construire le diagramme de séquence de niveau analyse correspondant. Faîtes apparaître les " |
+ | * [[2013_2014: | ||
</ | </ | ||
+ | |||
===== Déclaration des compétitions ===== | ===== Déclaration des compétitions ===== | ||
- | Nous nous focalisons à présent sur la déclaration d'une compétition | + | Sur la base de ce qui précède |
Une compétition est définie par la liste des joueurs inscrits. Une compétition se caractérise par une arme et une tranche d’âge. | Une compétition est définie par la liste des joueurs inscrits. Une compétition se caractérise par une arme et une tranche d’âge. | ||
- | Avant le début de la compétition, | + | La liste des matchs initiaux est établie comme suit : |
- | Chaque machine est alors en prête à contrôler une piste. | + | |
- | + | ||
- | la liste des matchs initiaux est établie comme suit : | + | |
* Le premier joueur présent (celui de rang le plus fort) est affecté au même match que celui de plus faible rang présent, | * Le premier joueur présent (celui de rang le plus fort) est affecté au même match que celui de plus faible rang présent, | ||
* le 2e joue avec l' | * le 2e joue avec l' | ||
- | * etc. | + | * etc. |
+ | * Si le nombre de joueurs est impair, le dernier joueur est automatiquement qualifié pour le tour d' | ||
- | // | + | // |
<box round rgb(185, | <box round rgb(185, | ||
* Définir le diagramme des classes d' | * Définir le diagramme des classes d' | ||
- | * Définir le diagramme de séquence correspondant à la construction " | + | * <del>Définir le diagramme de séquence correspondant à la construction " |
</ | </ | ||
Line 75: | Line 80: | ||
<box round rgb(185, | <box round rgb(185, | ||
* Définir le diagramme des classes en conception | * Définir le diagramme des classes en conception | ||
- | * Définir | + | * Eventuellement, |
</ | </ | ||
Line 81: | Line 86: | ||
<box round rgb(185, | <box round rgb(185, | ||
- | * écrire | + | * Ecrire |
* N' | * N' | ||
</ | </ | ||
+ | **Optionnel** | ||
+ | Vous pouvez continuer en prévoyant d' | ||
+ | * Si un joueur du tour précédent n'a pas joué il est pris en compte pour le dernier match à affecter | ||
+ | * Le gagnant du premier match joue contre le gagnant du dernier match etc.. | ||
+ | * Si le nombre de match est impair, le gagnant du match milieu est automatiquement qualifié pour le tour d' | ||
- | ===== ETAPE 3 : Agilité : Ajout de nouvelles fonctionnalités ===== | + | <note important> |
+ | Les rendus se font sur la forge. Vous avez jusqu' | ||
+ | Votre modélisation et votre code doit prendre en compte ce qui est noté comme optionnel, qui ne l'ai pas pour vous. | ||
- | Notre objectif est d' | + | Attention |
- | + | ||
- | + | ||
- | ??? Prévoir un google doc pour que chaque groupe partage les informations de changements? | + | |
- | Ou bien on le fait au tableau | + | |
- | + | ||
- | + | ||
- | + | ||
- | Pour chacune des fonctionnalités suivantes, vous devez répondre aux questions suivantes : | + | |
- | * Que devez-vous modifier pour prendre en compte cette nouvelle fonctionnalité? | + | |
- | * Plus formellement, | + | |
- | * Quelles recherches d' | + | |
- | * Quels codes seraient modifiés? Créez? | + | |
- | Soyez rigoureux | + | |
- | + | ||
- | Fonctionnalités additionnelles demandées | + | |
- | + | ||
- | - Pendant le match, | + | |
- | - On veut gérer des évènements. La portée d'un évènement peut être nationale, internationale, | + | |
- | - En cas de panne de courant, la compétition est interrompue. Mais elle doit pouvoir reprendre dès que l' | + | |
- | - Alors que comme vous l'avez vu les pistes sont identifiées par un numéro dans la machine qui vous a été livrée, cependant il est d' | + | |
- | - On désire afficher en temps réel les résultats de chaque piste (donc le détail des rounds) sur un grand écran. | + | |
- | - Si un joueur est gaucher on doit pouvoir permuter les joueurs sur le terrain afin que l’arbitre puisse suivre l’assaut. | + | |
- | - La liste des joueurs vous est transmis via des fichiers XML dont le format vous est donné ici. http:// | + | |
- | + | ||
- | + | ||
- | + | ||
- | ==== Prise de recul ==== | + | |
- | + | ||
- | - Evaluez | + | |
- | - Quelle fonction développeriez-vous en premier? Pourquoi? Quels sont vos critères de choix? (( et si maintenant on vous dit quelles sont les fonctionnalités les plus utiles au client? )). | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | ====== Etape 2 : " | + | |
- | < | + | |
- | + | ||
- | A l' | + | |
- | + | ||
- | Ces aspects, peut être pas en terme de code, seront abordés | + | |
</ | </ | ||
- | <note important> | ||
- | ===== Des codes fonctionnels ===== | ||
- | |||
- | Voici les codes d'une piste reliée à une machine. | ||
- | Fournir aussi l' | ||
- | |||
- | Fournir la javadoc | ||
- | |||
- | Voici le modèle associé et le scénario de lancement général envisagé. | ||
- | |||
- | ==== Retour sur l' | ||
- | |||
- | Comme vous avez dû le constater la " | ||
- | |||
- | Voici l' | ||
- | <code java> | ||
- | ??? | ||
- | </ | ||
- | |||
- | Votre code ne correspond probablement pas exactement à l' | ||
- | |||
- | Vous devez donc adapter** VOTRE CODE** (et pas l' | ||
- | |||
- | //Rappel : Pour dire qu'une classe implémente une interface// | ||
- | <code java> | ||
- | public class Match implements MatchInterface { | ||
- | </ | ||
- | |||
- | <box round rgb(185, | ||
- | * Modifier au niveau du code et du modèle (dans l' | ||
- | </ | ||
- | ==== Approche incrémentale ==== | ||
- | - Vous commencerez par créer une piste et tester | ||
- | - Par exemple | ||
- | |||
- | <code java> | ||
- | FencingPiste pist1 = new FencingPiste(1); | ||
- | FencingPiste pist2 = new FencingPiste(2); | ||
- | Match m1 = new Match();// | ||
- | Match m2 = new Match(); | ||
- | Match m3 = new Match(); | ||
- | |||
- | pist1.addMatch(m1); | ||
- | pist1.addMatch(m2); | ||
- | pist2.addMatch(m3); | ||
- | |||
- | pist1.start(); | ||
- | pist2.start(); | ||
- | |||
- | while (!(pist1.isOver() && pist2.isOver()) | ||
- | Thread.sleep(6000); | ||
- | System.out.println(" | ||
- | } | ||
- | |||
- | System.out.println(" | ||
- | System.out.println(" | ||
- | System.out.println(" | ||
- | |||
- | /* | ||
- | * 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 | ||
- | */ | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | // On ferme l' | ||
- | | ||
- | </ | ||
- | |||
- | ==== Intégration : Lancement d'une compétition ==== | ||
- | |||
- | Vous avez modélisé la semaine dernière une compétition. | ||
- | Vous devez à présent connecter une compétition aux pistes. | ||
- | Pour cela vous reprenez votre classe compétition... | ||
- | |||
- | |||
- | Amusez vous | ||
- | ===== Principes des codes donnés ===== | ||
- | |||
- | 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, | ||
- | StateMachine stateMachineOnPoints= new StateMachine(sleft, | ||
- | |||
- | /* 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' | ||
- | 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, | ||
- | } | ||
- | @Test | ||
- | public void testValidateOnScoreForRight() { | ||
- | sright.setScore(5); | ||
- | sleft.setScore(3); | ||
- | assertEquals(PlayerType.right, | ||
- | } | ||
- | |||
- | @Test | ||
- | public void testValidateFailOnScoreGap() { | ||
- | sleft.setScore(5); | ||
- | sright.setScore(4); | ||
- | assertEquals(PlayerType.fail, | ||
- | } | ||
- | |||
- | @Test | ||
- | public void testValidateFailOnScoreLevel() { | ||
- | sleft.setScore(4); | ||
- | sright.setScore(2); | ||
- | assertEquals(PlayerType.fail, | ||
- | } | ||
- | |||
- | |||
- | |||
- | // 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, | ||
- | } | ||
- | |||
- | @Test | ||
- | public void testValidateOnChronoRight() { | ||
- | sleft.setScore(1); | ||
- | sright.setScore(2); | ||
- | stateMachineOnChrono.setClockTime(THREE_MINUTES ); | ||
- | assertEquals(PlayerType.right, | ||
- | } | ||
- | |||
- | @Test | ||
- | public void testValidateFailOnChrono() { | ||
- | sleft.setScore(2); | ||
- | sright.setScore(2); | ||
- | stateMachineOnChrono.setClockTime(THREE_MINUTES + ONE_MINUTE); | ||
- | assertEquals(PlayerType.fail, | ||
- | } | ||
- | |||
- | @Test | ||
- | public void testValidateRandomOnChrono() { | ||
- | sleft.setScore(2); | ||
- | sright.setScore(2); | ||
- | stateMachineOnChrono.setClockTime(THREE_MINUTES + TWO_MINUTES); | ||
- | assertFalse(PlayerType.fail.equals( mc.validate(stateMachineOnChrono))); | ||
- | } | ||
- | |||
- | |||
- | </ | ||
- | ===== Amorçons la suite ===== | ||
- | |||
- | Cette fois-ci vous allez devoir utiliser vos propres capacités à modéliser. | ||
- | |||
- | Notre premier objectif est d' | ||
- | |||
- | 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/etape1.1398802370.txt.gz · Last modified: 2014/04/29 20:12 by blay