User Tools

Site Tools


2018_2019:s2:td:td_final

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
Next revision Both sides next revision
2018_2019:s2:td:td_final [2019/02/16 21:32]
blay [Votre application : SpyMe (2H20)]
2018_2019:s2:td:td_final [2019/02/28 21:09]
blay [La classe Journey (30mn)]
Line 1: Line 1:
 ====== De la modélisation au code : FINALE ====== ====== De la modélisation au code : FINALE ======
- 
-FIXME 
  
 Dans ce TD nous avons pour objectif de partir de la modélisation et d'​arriver au codage en 4h ! Dans ce TD nous avons pour objectif de partir de la modélisation et d'​arriver au codage en 4h !
- 
-comprendre la relation entre la modélisation et le code, et ceci en utilisant tous les éléments de modélisation. 
  
 /* /*
Line 17: Line 13:
  
 */ */
-===== Chemin et Parcours ​(30mn) =====+===== La classe "​Journey" ​(30mn) =====
  
-   * On définit un Chemin ​comme ayant un point de départ, un point d'​arrivée et un intitulé. +   * On définit un ''​Trajet/​Journey'' ​comme une suite ordonnée ​de points. 
-   * Un point peut appartenir à plusieurs ​chemins+   * Un point un intitulé ​(par exemple, "IUT, Fabron"​)
-   * On veut connaitre la distance que représente un chemin ​(cf. si besoin [[http://​fr.wikipedia.org/​wiki/​Distance_entre_deux_points_sur_le_plan_cart%C3%A9sien|Calcul de distance]]) +   * Un point peut appartenir à plusieurs ​Trajets. 
-   * Un Parcours est une suite ordonnée de chemins tels que le point de départ d'un chemin est le point d'​arrivée du chemin suivant. +   * Un point ne sait pas à quel(s) trajet(s) il est associé
-   * On veut connaitre la distance que représente un Parcours (c'est la somme des distances des chemins qui le composent).+   * On veut connaitre la distance que représente un Trajet, c'est la somme des distances entre les points ​(cf. si besoin [[http://​fr.wikipedia.org/​wiki/​Distance_entre_deux_points_sur_le_plan_cart%C3%A9sien|Calcul de distance]])
  
-   - Modéliser les concepts ​de Chemin et de Parcours.  +   - Modéliser ​le concept de Trajet, y compris ​les autres ​concepts ​dont vous pouvez avoir besoin
-          * Un chemin ne sait pas de quel(s) Parcours il fait éventuellement parti +
    - Codez-les.    - Codez-les.
- 
-<note warning>​Dans le modèle de la classe CHEMIN, IL N'Y A PAS D'​ATTRIBUTS ''​DEPART''​ et ''​ARRIVEE''​ mais des associations !</​note>​ 
-<note important>​Dans cet exercice, faîtes particulièrement attention aux rôles et à la navigation dans les associations. 
-</​note>​ 
  
 <note tip>Je sais représenter des associations entre classes et je comprends leur correspondance en java. </​note>​ <note tip>Je sais représenter des associations entre classes et je comprends leur correspondance en java. </​note>​
Line 67: Line 58:
        * Un membre peut visualiser les parcours passés : par la distance parcourue, la durée, la vitesse moyenne, la date (jour et heure), le type d'​entrainement,​ ...         * Un membre peut visualiser les parcours passés : par la distance parcourue, la durée, la vitesse moyenne, la date (jour et heure), le type d'​entrainement,​ ... 
        * En sélectionnant un parcours, un membre peut visualiser un parcours en utilisant googleMAP.        * En sélectionnant un parcours, un membre peut visualiser un parcours en utilisant googleMAP.
 +       * Un membre peut savoir quand il était le plus proche d'un point donné lors d'un parcours.
        * Un membre peut savoir où il était à une date particulière,​ en donnant la position occupée la plus proche de la date.        * Un membre peut savoir où il était à une date particulière,​ en donnant la position occupée la plus proche de la date.
        * Un membre peut préciser qu'il veut enregistrer un parcours d'​entrainement;​ dans ce cas, avant le départ, il précise le mode d'​entrainement. Pour chaque mode, un temps de relevé des points différent est prévu : marche rapide (2mn), course à pied (10s), vélos (5s), foot (10s), ...        * Un membre peut préciser qu'il veut enregistrer un parcours d'​entrainement;​ dans ce cas, avant le départ, il précise le mode d'​entrainement. Pour chaque mode, un temps de relevé des points différent est prévu : marche rapide (2mn), course à pied (10s), vélos (5s), foot (10s), ...
Line 100: Line 92:
     * Avez-vous besoin d'​information supplémentaires sur la notion de Point? Comment faire? ​     * Avez-vous besoin d'​information supplémentaires sur la notion de Point? Comment faire? ​
     * De quelles informations avez-vous besoin pour construire un Parcours?     * De quelles informations avez-vous besoin pour construire un Parcours?
-    *  
  
 == Obtenir le moment présent == == Obtenir le moment présent ==
Line 132: Line 123:
 </​code>​ </​code>​
  
 +<​accordion ​ collapsed="​true">​
 +<panel title="​Vision Globale : si vous avez besoin d'​aides">​
 === Vision Globale ​ === === Vision Globale ​ ===
  
Line 137: Line 130:
  
 <code java> <code java>
-public ​Parcours creerParcours(Membre ​m) throws InterruptedException{  + Scanner sc = new Scanner(System.in);​ 
- System.out.println("​Creation de parcours ​"); +        int interval = 1000; 
- ... + 
- .... + public ​Journey createJourney(Member ​m) throws InterruptedException{  
-                PointDate pCourant ​saisirPointDate(); ; + System.out.println("​Creating a journey ​"); 
- Parcours parcours ​= new Parcours(pCourant); +        ​DatedPoint currentPoint ​enterDatedPoint(); ; 
- boolean ​encore ​= true; + Journey path = new Journey(currentPoint); 
- while (encore){ + boolean ​again = true; 
- pCourant ​saisirPointDate();  + while (again){ 
- parcours.addPoint(pCourant); + currentPoint ​enterDatedPoint();  
- System.out.println("​Distance ​parcourue ​: " + parcours.distance());​ + path.addPoint(currentPoint); 
- System.out.println("​Durée depuis le départ ​: " + parcours.duree() + " soit :" + parcours.duree()/1000 + " secondes"​ ); + System.out.println("​Distance ​ : " + path.distance());​ 
- .... + System.out.println("​Duration since departure ​: " + path.duration() + " soit :" + path.duration()/1000 + " secondes"​ ); 
- System.out.println("​On continue ? (true or false)"​);​ + System.out.println("​We continue ? (true or false)"​);​ 
- encore ​= sc.nextBoolean();​ + again = sc.nextBoolean();​ 
- Thread.sleep(intervalle);  //1000 milliseconds is one second.+ Thread.sleep(interval);  //1000 milliseconds is one second.
  }  }
- return ​parcours; + return ​path;
  }  }
-  +  
- private ​PointDate saisirPointDate() { + private ​DatedPoint enterDatedPoint() { 
- PointDate pCourant;+ DatedPoint currentPoint;
  int x;  int x;
  int y;  int y;
Line 167: Line 160:
  //obtenir la date courante  //obtenir la date courante
  Date date = new Date();  Date date = new Date();
- pCourant ​= new PointDate(x,​y,​date);​ + currentPoint ​= new DatedPoint(x,​y,​date);​ 
- return ​pCourant;+ return ​currentPoint;​ 
 +
 +  
 +</​code>​ 
 + 
 + 
 +Autres exemples 
 + 
 +<code java> 
 +//To improve taking into account the displacement 
 + public Date whenWasYouHere(Point point) { 
 + DatedPoint closestPoint = points[0];​ 
 + double distanceMin = point.distance(closestPoint);​ 
 + for (int i =1; i<​nextPlace;​i++) { 
 + double distance = point.distance(points[i]);​ 
 + if (distance < distanceMin) { 
 + distanceMin = distance; 
 + closestPoint = points[i];​ 
 +
 +
 + return closestPoint.getDate();​ 
 +
 +  
 +  
 + //To improve taking into account the displacement 
 + public DatedPoint whereWereYou(Date date) { 
 + long time = date.getTime();​ 
 + DatedPoint closestPoint = points[0];​ 
 + long durationMin = Math.abs(closestPoint.getDate().getTime()-time);​ 
 + for (int i =1; i<​nextPlace;​i++) { 
 + long duration = Math.abs(points[i].getDate().getTime()-time);​ 
 + if (duration < durationMin) { 
 + durationMin = duration; 
 + closestPoint = points[i];​ 
 +
 +
 + return closestPoint;
  }  }
  
 </​code>​ </​code>​
 +
 +Et des exemples de tests ...
 +
 +<code java>
 +@Test
 + void testClosestPoint() throws InterruptedException {
 + Date currentDate1 = new Date();
 + DatedPoint currentPoint1 = new DatedPoint(5,​5,​currentDate1) ;​
 + Thread.sleep(1000); ​
 + Date currentDate2 = new Date();
 + DatedPoint currentPoint2 = new DatedPoint(7,​7,​currentDate2) ;​
 + Thread.sleep(1000); ​
 + DatedPoint currentPoint3 = new DatedPoint(10,​10,​new Date()) ;
 + Thread.sleep(1000); ​
 + Date currentDate3 = new Date();
 + Journey path = new Journey(currentPoint1);​
 + path.addPoint(currentPoint2);​
 + path.addPoint(currentPoint3);​
 + assertEquals(currentPoint1.getDate(),​ path.whenWasYouHere(currentPoint1));​
 + assertEquals(currentPoint2.getDate(),​ path.whenWasYouHere(currentPoint2));​
 + assertEquals(currentPoint3.getDate(),​ path.whenWasYouHere(currentPoint3));​
 + assertEquals(currentPoint3.getDate(),​ path.whenWasYouHere(new DatedPoint(12,​12,​new Date())));
 + assertEquals(currentPoint1.getDate(),​ path.whenWasYouHere(new DatedPoint(4,​4,​new Date())));
 + assertEquals(currentPoint2.getDate(),​ path.whenWasYouHere(new DatedPoint(8,​8,​new Date())));
 +
 + }
 +
 +
 + @Test
 + void testWhereWereYou() throws InterruptedException {
 + Date currentDate1 = new Date();
 + DatedPoint currentPoint1 = new DatedPoint(5,​5,​currentDate1) ;​
 + Thread.sleep(1000); ​
 + Date currentDate2 = new Date();
 + DatedPoint currentPoint2 = new DatedPoint(7,​7,​currentDate2) ;​
 + Thread.sleep(1000); ​
 + DatedPoint currentPoint3 = new DatedPoint(10,​10,​new Date()) ;
 + Thread.sleep(1000); ​
 + Date currentDate3 = new Date();
 + Journey path = new Journey(currentPoint1);​
 + path.addPoint(currentPoint2);​
 + path.addPoint(currentPoint3);​
 + assertEquals(currentPoint1,​ path.whereWereYou(currentDate1));​
 + assertEquals(currentPoint2,​ path.whereWereYou(currentDate2));​
 + assertEquals(currentPoint3,​ path.whereWereYou(currentDate3));​
 + assertEquals(currentPoint3,​ path.whereWereYou(new Date()));
 + assertEquals(currentPoint1,​ path.whereWereYou(new Date(currentDate1.getTime()-1000)) );
 + }
 +</​code>​
 +
 +
 +</​panel> ​
 +</​accordion>​
 +
 +
 +==== Rendu pour ce devoir ====
 +
 +FIXME
 +
 +    - 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>A déterminer</​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
  
  
2018_2019/s2/td/td_final.txt · Last modified: 2019/04/12 16:13 by blay