This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
2019_2020:s2:td:td8 [2020/03/01 22:55] blay [La classe Journey (30mn)] |
2019_2020:s2:td:td8 [2020/03/08 16:58] blay [De la modélisation au code : FINALE] |
||
---|---|---|---|
Line 2: | Line 2: | ||
+ | [[2019_2020:s2:td:coorectionexamintermediaire|Corrections de l'examen intermédiaire]] | ||
+ | |||
+ | |||
+ | {{:2019_2020:s2:td:exams2-mars2019.pdf|L'examen de l'an passé}} | ||
===== La classe "Journey" (30mn) ===== | ===== La classe "Journey" (30mn) ===== | ||
- | * On définit un ''Trajet/Journey'' comme une suite ordonnée de points. | + | * On définit un ''Trajet/Journey'' comme une suite ordonnée de points.(( Pour dire qu'une association est ordonnée, il faut le sélectionner dans la partie {{:2019_2020:s2:td:capture_d_e_cran_2020-03-04_a_14.50.04.png|}} properties)) |
* Un point a un intitulé (par exemple, "IUT, Fabron"). | * Un point a un intitulé (par exemple, "IUT, Fabron"). | ||
* Un point peut appartenir à plusieurs Trajets. | * Un point peut appartenir à plusieurs Trajets. | ||
Line 61: | Line 65: | ||
Evidemment vous commencez par identifier les cas d'utilisation de haut niveau. Mais ensuite vous pouvez travailler comme bon vous semble. | Evidemment vous commencez par identifier les cas d'utilisation de haut niveau. Mais ensuite vous pouvez travailler comme bon vous semble. | ||
* Définir le diagramme de cas d'utilisation | * Définir le diagramme de cas d'utilisation | ||
- | * **Partie 1** : "Prévoyez" les tests correspondant aux scénarii suivants : | + | * Définir le diagramme de classes |
+ | * Définir le diagramme de séquence correspondant à l'enregistrement d'un parcours par un membre, vous pouvez vous aider du diagramme ci-après. | ||
+ | * Implémenter les scénario de la partie 1 ci-après en vous aidant des codes donnés. En particulier, comme nous ne disposons pas du GPS dans l'exemple donné ci-après c'est l'utilisateur qui saisit sa position. De même comme vous ne connaissez pas encore la parallèlisation des tâches on demande à chaque relevé de position, s'il faut ou non continuer à enregistrer le parcours. | ||
+ | * Pouvez-vous étendre votre application pour donner la vitesse moyenne entre deux points donnés d'un parcours? | ||
+ | |||
+ | |||
+ | * **Partie 1** : Voici des exemples très simples de tests de "validation", c'est à dire des tests qui mettent en exergue certaines des exigences client décrites ci-dessus. | ||
- "Bipbip" s'inscrit en utilisant son compte "Facebook"; | - "Bipbip" s'inscrit en utilisant son compte "Facebook"; | ||
- "Xavier-Bertrand" s'inscrit en saisissant son nom et déclare son compte twitter; | - "Xavier-Bertrand" s'inscrit en saisissant son nom et déclare son compte twitter; | ||
- | - "Bipbip" demande l'enregistrement de son parcours "lundi": par exemple : Journey [points=[ [date=Thu Feb 28 21:39:15 CET 2019, Point [x=5, y=5, label=domicile]], [date=Thu Feb 28 21:39:16 CET 2019, Point [x=7, y=7, label=p1]], [date=Thu Feb 28 21:39:17 CET 2019, Point [x=10, y=10, label=p2]],..</code> | + | - "Bipbip" demande l'enregistrement de son parcours "lundi": par exemple : <code> Journey [points=[ [date=Thu Feb 28 21:39:15 CET 2019, Point [x=5, y=5, label=domicile]], [date=Thu Feb 28 21:39:16 CET 2019, Point [x=7, y=7, label=p1]], [date=Thu Feb 28 21:39:17 CET 2019, Point [x=10, y=10, label=p2]],..</code> |
- | - "Bipbip" demande quand il était près d'un point d'un parcours donné : (1) point enregistré pendant le parcours e.g. ( (7,7) -> ''date=Thu Feb 28 21:39:16 CET 2019'') ; (2) point le plus proche quand il était le plus proche d'un point donné lors d'un parcours (e.g. (12,12) -> ''date=Thu Feb 28 21:39:17 CET 2019'') | + | - "Bipbip" demande //quand// il était près d'un point d'un parcours donné : |
+ | - (1) si le point a été enregistré pendant le parcours e.g. ( (7,7) -> ''date=Thu Feb 28 21:39:16 CET 2019'') ; | ||
+ | - (2) si le point n'a pas été enregistré, il cherche le point le plus proche lors d'un parcours (e.g. (12,12) -> ''date=Thu Feb 28 21:39:17 CET 2019'') | ||
-"Bipbip" demande où il était à ''Thu Feb 28 21:39:17 CET 2019'' : le système renvoie (12,12) etc. | -"Bipbip" demande où il était à ''Thu Feb 28 21:39:17 CET 2019'' : le système renvoie (12,12) etc. | ||
* **Partie 2** : "Prévoyez" les tests correspondant aux scénarii suivants, mais, à moins d'être très avancés n'allez pas au code. | * **Partie 2** : "Prévoyez" les tests correspondant aux scénarii suivants, mais, à moins d'être très avancés n'allez pas au code. | ||
Line 72: | Line 84: | ||
- "Bipbip" demande à voir ses parcours triés par la vitesse moyenne: il a couru lundi à 11km/h et mercredi 10km/h. | - "Bipbip" demande à voir ses parcours triés par la vitesse moyenne: il a couru lundi à 11km/h et mercredi 10km/h. | ||
- "Xavier-Bertrand" déclare un nouveau mode d'entrainement : le Marathon, les relevés ne se font que toutes les minutes. | - "Xavier-Bertrand" déclare un nouveau mode d'entrainement : le Marathon, les relevés ne se font que toutes les minutes. | ||
- | * Définir le diagramme de classes | ||
- | * Définir le diagramme de séquence correspondant à l'enregistrement d'un parcours par un membre, vous pouvez vous aider du diagramme ci-après. | ||
- | * Implémenter les scénario de la partie 1 en vous aidant des codes ci-après. En particulier, comme nous ne disposons pas du GPS dans l'exemple donné ci-après c'est l'utilisateur qui saisit sa position. De même comme vous ne connaissez pas encore la parallèlisation des tâches on demande à chaque relevé de position, s'il faut ou non continuer à enregistrer le parcours. | ||
- | * Pouvez-vous étendre votre application pour donner la vitesse moyenne entre deux points donnés d'un parcours? | ||
- | |||
==== Pour vous aider ==== | ==== Pour vous aider ==== | ||
Line 199: | Line 206: | ||
<code java> | <code java> | ||
- | @Test | + | void testClosestPoint() throws InterruptedException { |
- | void testClosestPoint() throws InterruptedException { | + | |
Date currentDate1 = new Date(); | Date currentDate1 = new Date(); | ||
- | DatedPoint currentPoint1 = new DatedPoint(5,5,currentDate1) ; | + | DatedPoint currentPoint1 = new DatedPoint(5,5,currentDate1,"domicile") ; |
Thread.sleep(1000); | Thread.sleep(1000); | ||
Date currentDate2 = new Date(); | Date currentDate2 = new Date(); | ||
- | DatedPoint currentPoint2 = new DatedPoint(7,7,currentDate2) ; | + | DatedPoint currentPoint2 = new DatedPoint(7,7,currentDate2,"p1") ; |
Thread.sleep(1000); | Thread.sleep(1000); | ||
- | DatedPoint currentPoint3 = new DatedPoint(10,10,new Date()) ; | + | DatedPoint currentPoint3 = new DatedPoint(10,10,new Date(),"p2") ; |
Thread.sleep(1000); | Thread.sleep(1000); | ||
- | Date currentDate3 = new Date(); | ||
Journey path = new Journey(currentPoint1); | Journey path = new Journey(currentPoint1); | ||
path.addPoint(currentPoint2); | path.addPoint(currentPoint2); | ||
path.addPoint(currentPoint3); | path.addPoint(currentPoint3); | ||
+ | System.out.println(path); | ||
assertEquals(currentPoint1.getDate(), path.whenWasYouHere(currentPoint1)); | assertEquals(currentPoint1.getDate(), path.whenWasYouHere(currentPoint1)); | ||
assertEquals(currentPoint2.getDate(), path.whenWasYouHere(currentPoint2)); | assertEquals(currentPoint2.getDate(), path.whenWasYouHere(currentPoint2)); | ||
assertEquals(currentPoint3.getDate(), path.whenWasYouHere(currentPoint3)); | assertEquals(currentPoint3.getDate(), path.whenWasYouHere(currentPoint3)); | ||
- | assertEquals(currentPoint3.getDate(), path.whenWasYouHere(new DatedPoint(12,12,new Date()))); | + | assertEquals(currentPoint3.getDate(), path.whenWasYouHere(new Point(12,12))); |
- | assertEquals(currentPoint1.getDate(), path.whenWasYouHere(new DatedPoint(4,4,new Date()))); | + | assertEquals(currentPoint1.getDate(), path.whenWasYouHere(new Point(4,4))); |
- | assertEquals(currentPoint2.getDate(), path.whenWasYouHere(new DatedPoint(8,8,new Date()))); | + | assertEquals(currentPoint2.getDate(), path.whenWasYouHere(new Point(8,8))); |
} | } | ||
Line 245: | Line 251: | ||
</code> | </code> | ||
+ | {{:2019_2020:s2:td:journey.jpg|}} | ||
</panel> | </panel> | ||
</accordion> | </accordion> | ||
- | |||
- | ==== Rendu pour ce devoir ==== | ||
- | |||
- | - Les rendus se font sous [[http://jalon.unice.fr/cours/blay/Cours-blay-20160226085155/BoiteDepot-blay-20190217142915655329?mode_etudiant=true&tab=deposit|jalon]] avant <color red>11 mars 9h/color> | ||
- | - Le rendu respecte ce qui suit : | ||
- | - il se fait à 2 maximum | ||
- | - le titre est composé de FIN<NumeroDuGroupe>_NomEtudiant__NomEtudiant //(e.g. DS1_Doe_Smith ou UC2_Harry)// | ||
- | - Un document qui comprend : | ||
- | - votre diagramme de cas d'utilisation | ||
- | - votre diagramme de séquence | ||
- | - votre diagramme de classes cohérent relativement à l'ensemble de l'étude de cas et donc complété relativement au diagramme de séquence | ||
- | - les codes sources (là où vous en êtes) | ||
- | - les tests si vous en avez, sinon le main de test | ||
- | |||
- | **Erreurs** | ||
- | * Livrer les binaires | ||
- | * ne pas livrer un document mais des images | ||
- | * Livrer les codes dans un .txt ! | ||