User Tools

Site Tools


2014_2015:s2:td:td_classes-code

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
Last revision Both sides next revision
2014_2015:s2:td:td_classes-code [2015/04/18 08:25]
blay [Spécialisation et Enuméré (10 mn)]
2014_2015:s2:td:td_classes-code [2015/05/01 09:54]
blay [Utilisation d'une classe : Chemin et Trajet]
Line 86: Line 86:
  
 ==== Spécialisation et Enuméré (10 mn) ==== ==== Spécialisation et Enuméré (10 mn) ====
-La tondeuse a plusieurs vitesses de traction possibles : arret, lent, moyenne ​ou rapide. Il est possible de changer la vitesse de la tondeuse. Au démarrage, sa vitesse est toujours à l'​arrêt. Lorsque l'on éteint la tondeuse sa vitesse passe à arrêt.+La tondeuse a plusieurs vitesses de traction possibles : arret, lent, moyen ou rapide. Il est possible de changer la vitesse de la tondeuse. Au démarrage, sa vitesse est toujours à moyenne. Lorsque l'on éteint la tondeuse sa vitesse passe à arrêt.
   - Modifier le modèle de la classe Tondeuse pour tenir compte de cette nouvelle information. Les Vitesses sont un //​énuméré//​. Créer une //​enumeration//​ dans le modèle, lui ajouter les ''​enumerate literal''​ //arret//, ...    - Modifier le modèle de la classe Tondeuse pour tenir compte de cette nouvelle information. Les Vitesses sont un //​énuméré//​. Créer une //​enumeration//​ dans le modèle, lui ajouter les ''​enumerate literal''​ //arret//, ... 
   - Générer vos codes.   - Générer vos codes.
   - Ecrivez les codes correspondant. Pour accéder dans votre code par exemple à l'​énuméré "​arret",​ vous écrirez par exemple, ''​v = Vitesse.arret;''​   - Ecrivez les codes correspondant. Pour accéder dans votre code par exemple à l'​énuméré "​arret",​ vous écrirez par exemple, ''​v = Vitesse.arret;''​
-  - **Etendez** les tests précédents pour vérifier que vos codes font bien ce qui est attendu. Vous devez lancer TOUS les tests. Vous constatez à ce stade que la vérification de la réussite ou non des tests est plus "​longue",​ c'est pourquoi aujourd'​hui on utilise des méthodes de tests qui systématise les verifications ​et signalent spécifiquement les erreurs.+  - **Etendez** les tests précédents pour vérifier que vos codes font bien ce qui est attendu. Vous devez lancer TOUS les tests. Vous constatez à ce stade que la vérification de la réussite ou non des tests est plus "​longue",​ c'est pourquoi aujourd'​hui on utilise des méthodes de tests qui systématise les vérifications ​et signalent spécifiquement les erreurs.
  
 <code java> <code java>
Line 99: Line 99:
  //Il est possible de changer la vitesse de la tondeuse. ​  //Il est possible de changer la vitesse de la tondeuse. ​
  maTondeuse.switchOn();​  maTondeuse.switchOn();​
- System.out.println("​Vitesse de Tondeuse au démarrage ​attendue "+ Vitesse.arret +"​==>"​ + maTondeuse.getVitesse());​ + System.out.println("​Vitesse de Tondeuse au démarrage attendue "+ Vitesse.moyen +"​==>"​ + maTondeuse.getVitesse());​
- maTondeuse.setVitesse(Vitesse.moyen);​ +
- System.out.println("​Vitesse de Tondeuse ​attendue "+ Vitesse.moyen +"​==>"​ + maTondeuse.getVitesse());​+
  maTondeuse.setVitesse(Vitesse.rapide);​  maTondeuse.setVitesse(Vitesse.rapide);​
  System.out.println("​Vitesse de Tondeuse attendue "+ Vitesse.rapide +"​==>"​ + maTondeuse.getVitesse());​  System.out.println("​Vitesse de Tondeuse attendue "+ Vitesse.rapide +"​==>"​ + maTondeuse.getVitesse());​
Line 109: Line 107:
  maTondeuse.setVitesse(Vitesse.rapide);​  maTondeuse.setVitesse(Vitesse.rapide);​
  maTondeuse.switchOn();​  maTondeuse.switchOn();​
- System.out.println("​Vitesse de Tondeuse au démarrage attendue (alors que on a modifie sa vitesse "+ Vitesse.arret +"​==>"​ + maTondeuse.getVitesse());​+ System.out.println("​Vitesse de Tondeuse au démarrage attendue (alors que on a modifie sa vitesse "+ Vitesse.moyen +"​==>"​ + maTondeuse.getVitesse());​
  maTondeuse.switchOff();​  maTondeuse.switchOff();​
 </​code>​ </​code>​
   ​   ​
-==== Tester ==== 
- 
-   - Si vous avez vu les tests unitaires, c'est le moment! Sinon ... 
-   - Ecrire ​  ​un ​  ​programme ​  ​principal ​ qui   ​crée ​  ​un ​  ''​TailleHaie'' ​  ​et ​  ​une ​  ''​Tondeuse'' ​  ​et ​ utilise ​ les  services ​ à  leur  disposition.  ​ 
- 
 <note tip>​N'​hésitez pas à ajouter des commentaires dans vos codes, ils sont conservés par le java round-trip! </​note>​ <note tip>​N'​hésitez pas à ajouter des commentaires dans vos codes, ils sont conservés par le java round-trip! </​note>​
-==== Utiliser ​ une classe ====+==== Utiliser ​ une classe ​(25mn) ​====
  
-Il  sagit  de  ​créer ​ une  représentation ​ UML  ​d’une ​ classe  ​''​Jardinier'' ​ dont  les  attributs ​ seront ​ ​le  ​prénom ​ du  ​jardinier ​ ​et ​ l’outil ​ électrique  ​quil  ​doit ​ utiliser ​ pour  travailler ​ (un  ​taille haie  ou  une  tondeuse).  ​Au  moment ​  de   sa   ​création  on   ​suppose ​  ​que ​ le  jardiner ​  n’  pas   d’outil  en  main.   ​L’outil ​ à   ​utiliser ​ sera  transmis ​ comme  argument ​ à une méthode ​''​startTravail''​(…).  ​Prévoyez ​ également ​ une  méthode ​ ''stopTravail''​(…) Quand le jardinier stoppe le travail, il ne lâche pas l'outil+Il s'agit de développer à présent un robot "​Jardinier"​. 
-  - Complétez ​ la  ​représentation ​ UML  ​des  liens  entre  les  classes.+On peut donner un outil à un jardinier, lui demander de travailler ou d'arrêter de travailler.  
 +  * Nos robots ont tous un nom qui leur est donné à la création. Il n'est pas possible de le modifier par la suite. 
 +  * Si on donne un outil au jardinier ​alors qu'il en a déjà ​un, il prend le nouvel outil et relâche l'​ancien outil. 
 +  * Si on lui demande ​de travailler sans lui avoir donné d'​outilil répond par //"​Donnez-moi un outil!"//​. S'​il ​un outil en main, il le démarre et répond par "Je démarre " suivi de la description de l'outil démarré. 
 +  * Si on lui demande d'arrêter de travailler, il répond par //"​Merci,​ la journée a été dure!"//​S'il a un outil en main, il l'arrête et le "​lâche"​. 
 + 
 +  - Donner une représentation ​ UML  ​du problème du ''​Jardinier''​.
   - Générer les codes correspondants. Si les résultas ne vous satisfont pas, corriger votre modèle. En particulier,​ vous devrez utiliser la navigation entre les classes.   - Générer les codes correspondants. Si les résultas ne vous satisfont pas, corriger votre modèle. En particulier,​ vous devrez utiliser la navigation entre les classes.
   - Compléter ​ les codes correspondants.   - Compléter ​ les codes correspondants.
-  - Ecrire un  petit  ​programme  ​principal ​ qui  teste  votre  classe ​on demande au jardinier de commencer à travailler en lui donnant ​un taille Haiequ'il démarrePuis on lui demande de s'arrêter ​de travailler. Il arrête le taille Haiepuis le relâche+  - Eventuellement par reverse-engineering,​ reconstruisez votre modèle. 
- +  - Evidemment tester votre programme. Voici un exemple de trace possible à l'​exécution des tests. 
 +<​code>​ 
 +=========================TESTS Jardinier =================== 
 +Bonjour Je suis R2-D2 : je n'ai pas d'​outil  
 +Début ​ du travail pour le jardinier : Donnez-moi un outil! 
 +On lui a donné la tondeuse : Je suis R2-D2, je tiens : Tondeuse [vitesse=arret,​ cadence=0] 
 +Debut du travail pour le jardinier : Je démarre : Tondeuse [vitesse=moyen,​ cadence=1000] 
 +Arret du travail pour le jardinier : Merci, la journée a été dure! 
 +  La tondeuse doit être à l'​arrêt ​Tondeuse [vitesse=arret,​ cadence=0] 
 + Le jardinier ​n'a plus d'​outil : Je suis R2-D2 : je n'ai pas d'​outil 
 +</​code>​ 
 + 
 +  - Et si nous voulions représenter plusieurs sortes ​de Robot, que ferions-nous?​ Et si tout robot était ​un Outil Electrique ?  
 +===== Devoir facultatif pendant les vacances ===== 
 + 
 + 
 +A présent notre robot peut utiliser un véhicule. 
 + 
 +Un ''​véhicule''​ a une ''​position''​ (XY en entier). 
 +Il peut se déplacer sur l'axe des x ou des y. 
 +Il peut être initialisé,​ ce qui le place en position (0,0). 
 + 
 +Un ''​charriot''​ est un véhicule qui se déplace d'un delta de 10 à chaque ​demande de déplacement : s'il est en (0,0), déplacer le chariot sur X l'​amène en (10,0), puis en déplacement sur XY l'​amène en (20,10). 
 + 
 +Une ''​fusee''​ est un véhicule qui se déplace d'un delta de 100 à chaque demande de déplacement. 
 + 
 +On peut donner un véhicule au robot. Il l'​initialise quand il le reçoit. 
 +On peut demander au robot de se déplacer selon un schéma donné : "​XYXX"​. Le robot déplacera alors le véhicule de X puis de Y puis de X puis de X. 
 + 
 +Quand le robot arrête ​de travailler il ramène ​le véhicule en position initiale. 
 + 
 +Voici un exemple de trace obtenue en testant ce qui est demandé. 
 + 
 +<​code>​ 
 +=========================TESTS Jardinier & Vehicule =================== 
 +===================TESTS Vehicules =================== 
 +Chariot => Vehicule [position=[0,0]] 
 +Avance sur X : Chariot => Vehicule [position=[10,​0]] 
 +Avance sur Y : Chariot => Vehicule [position=[10,​10]] 
 +Fusee => Vehicule [position=[0,​0]] 
 +Avance sur X : Fusee => Vehicule [position=[1000,​0]] 
 +Avance sur Y : Fusee => Vehicule [position=[1000,​1000]] 
 +===================TESTS jardinier & Vehicules =================== 
 +Pas de vehicule : Je suis R2-D2 : je n'ai pas d'​outil ​ je n'ai pas de vehicule  
 +Avec un charriot : Je suis R2-D2 : je n'ai pas d'​outil , j'ai ce vehicule Chariot => Vehicule [position=[0,​0]] 
 +Deplacement du jardinier en XYX, on attend (0,​0),​(10,​0) (10,10) (20,10)  
 + [0,0] 
 + [10,0] 
 + [10,10] 
 + [20,10] 
 +Debut du travail pour le jardinier : Je démarre : Tondeuse [vitesse=moyen,​ cadence=1000] 
 +Position du charriot attendue en (0,0): [0,0] 
 +Deplacement du jardinier en YYX on l'​attend en (10,20) avec la tondeuse 
 + Je suis R2-D2, je tiens : Tondeuse [vitesse=moyen,​ cadence=1000],​ j'ai ce vehicule Chariot => Vehicule [position=[10,​20]] 
 +Arret du travail pour le jardinier : Merci, la journée a été dure! 
 + Je suis R2-D2 : je n'ai pas d'​outil , j'ai ce vehicule Chariot => Vehicule [position=[0,​0]] 
 +</​code>​ 
 + 
 + 
 +<box round rgb(185,​211,​238) rgb(198,​226,​255) 95%|TD Noté facultatif: remis à votre encadreur par mail ayant pour sujet((Sans cet intitulé les rendus ne seront pas évalués!!)) "[S2] modeles : //Groupe// : //Membres du binôme//"​ avec en attachement un document contenant vos diagrammes et votre code. Le fichier des diagrammes sera nommé TP_N_NumeroduTP_NomEtudiant1_NomEtudiant2 sans compression : 8 mai 2015 23h59>  
 + 
 +{{:​omgl:​acsi:​cours7.gif|}} ​ Rendre le diagramme de classe et le code correspondant à l'​exercice,​ y compris les tests. 
 +</​box>​ 
 ===== Reverse et agrégation ===== ===== Reverse et agrégation =====
  
Line 136: Line 198:
 ==== Utilisation d'une classe : Chemin et Trajet ==== ==== Utilisation d'une classe : Chemin et Trajet ====
  
-   * On définit un chemin comme ayant un point de départ ​et un point d'​arrivée et un intitulé. +   * On définit un chemin comme ayant un point de départun point d'​arrivée et un intitulé. 
-   * Un point peut appartenir à plusieurs ​segments.+   * Un point peut appartenir à plusieurs ​chemins.
    * On veut connaitre la distance que représente un chemin.    * On veut connaitre la distance que représente un chemin.
    * Un trajet 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 trajet 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.
2014_2015/s2/td/td_classes-code.txt · Last modified: 2015/05/01 09:56 by blay