User Tools

Site Tools


2017_2018:s2:td:td_domaine_partie_2

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
2017_2018:s2:td:td_domaine_partie_2 [2018/02/18 20:03]
blay [Classes : modélisation et codage]
2017_2018:s2:td:td_domaine_partie_2 [2018/03/05 14:14]
blay [Classe ''Tondeuse'' (10mn)]
Line 9: Line 9:
  
  
 +<callout type="​info"​ icon="​true">​  
 +Il ne reste que 4 séances en tout. 
 +  * La semaine du 5 mars est consacrée à cette feuille de TD. 
 +  * La semaine du 12 mars est consacrée à des révisions pour l'​examen. Vous devez les préparer pour que ces séances soient vraiment efficaces. 
 +</​callout>​
 ===== Classe : Code et modélisation ===== ===== Classe : Code et modélisation =====
 <note tip> <note tip>
Line 19: Line 23:
  
 <​note>​Exercices inspirés de http://​www.fresnel.fr/​perso/​derrode/​index.html (le site a disparu... et je n'en trouve plus trace...)</​note>​ <​note>​Exercices inspirés de http://​www.fresnel.fr/​perso/​derrode/​index.html (le site a disparu... et je n'en trouve plus trace...)</​note>​
 +
 +<note warning>​Vous rencontrez beaucoup de soucis avec Modelio. \\
 +Vous pouvez faire ce TD sur papier mais il vous manquera la génération des codes et le reverse-engineering des codes aux modèles. Vous devez alors voir précisément avec votre enseignant.\\
 +L'​outil VisualParadigm est beaucoup plus stable. Cependant il vous faut la version de test professionnelle pour avoir le générateur de codes.Vous l'​aurez au moins jusqu'​à la fin du module.
 +</​note>​
 <​html>​ <​html>​
 <​!-- ​ <​!-- ​
Line 30: Line 39:
 --!> --!>
 </​html>​ </​html>​
-==== Classe ''​TailleHaie''​ (10mn) ====+==== Classe ''​TailleHaie''​ (20mn) ====
  
  
Line 44: Line 53:
         private int cadence = 4500;         private int cadence = 4500;
   
-        //Accesseur+        //​Accesseur ​en lecture
  public int getCadence() {  public int getCadence() {
  return this.cadence;​  return this.cadence;​
Line 54: Line 63:
  
        ​public void switchOn() {        ​public void switchOn() {
- this.setCadence(4500);+ cadence = 4500;
  }  }
  
- public void switchOff() { 
- this.setCadence(0);​ 
- } 
  
         //​Constructeur         //​Constructeur
Line 66: Line 72:
  }  }
 } }
-</​code>​)). ​   +</​code>​)). ​  Les exceptions levées dans le corps des méthodes générées permettent de signaler les méthodes encore non implémentées. Vous devez retirer les levées d'​exception en implémentant les méthodes.
-Les exceptions levées dans le corps des méthodes générées permettent de signaler les méthodes encore non implémentées. Vous devez retirer les levées d'​exception en implémentant les méthodes.+
   - On veut pouvoir connaître la cadence du ''​TailleHaie''​.   - On veut pouvoir connaître la cadence du ''​TailleHaie''​.
   - Tester votre code. Si vous n'avez pas encore vu la notion de Test en java vous pouvez mettre vos tests dans une classe dédiée comportant un ''​main''​ et votre test peut ressembler à ce qui suit.   - Tester votre code. Si vous n'avez pas encore vu la notion de Test en java vous pouvez mettre vos tests dans une classe dédiée comportant un ''​main''​ et votre test peut ressembler à ce qui suit.
Line 121: Line 126:
 } }
 </​code>​ </​code>​
-<note important>​ Maintenez le modèle et le code en cohérence((Code -> Java Round-trip)) .</​note>​ +<note important>​ Maintenez le modèle et le code en cohérence((si outil : Code -> Java Round-trip)) .</​note>​ 
-==== Classe ''​Tondeuse''​ (5mn) ====+==== Classe ''​Tondeuse''​ (10mn) ====
  
-Sur  le  même  modèle, ​ une  tondeuse ​ est  caractérisée ​ par  la  vitesse ​ de  rotation ​ de  sa  lame,  +Sur  le  même  modèle, ​ une  tondeuse ​ est  caractérisée ​ par  ​ 
-typiquement 1000 Tour/minute. On prévoira  ​ +    * la  vitesse ​ de  rotation ​ de  sa  lame,  typiquement 1000 Tour/minute
-    * switchOn()+:​ méthode qui allume l’outil et fixe la cadence à 1000+    * une cadence; 
 +    * switchOn()+:​ méthode qui allume l’outil et fixe la cadence à 1000;
     * switchOff()+:​ méthode qui éteint l’outil et fixe la cadence à 0.      * switchOff()+:​ méthode qui éteint l’outil et fixe la cadence à 0. 
  
Line 149: Line 155:
    
   - Mettez en facteur les éléments qui peuvent l'​être dans la modélisation UML en ajoutant une classe ''​OutilElectrique''​.   - Mettez en facteur les éléments qui peuvent l'​être dans la modélisation UML en ajoutant une classe ''​OutilElectrique''​.
-  - En fonction de vos choix, ​déterminer ​s'il s'agit d'une classe abstraite ou non. ((un attribut privé n'est pas accessible par les sous-classesvous devez soit ne pas dire ''​private''​ et donc ne rien dire, soit le mettre en ''​protected'',​ soit mieux utiliser les accesseurs.)) +  - Pour les plus avancés, en fonction de vos choix, ​déterminez ​s'il s'agit d'une classe abstraite ou non. ((Un attribut privé n'est pas accessible par les sous-classesvous devez donc utiliser les accesseurs.)) 
-  - Modifier la modélisation et les codes en conséquences.+  - Modifier la modélisation et les codes en conséquence.(( 
 +<code java>  
 +public abstract class OutilElectrique { 
 + private int cadence = 4500; 
 + 
 + public int getCadence() { 
 + return this.cadence;​ 
 +
 +  
 + protected void setCadence(int cadence){ 
 + this.cadence = cadence; 
 +
 + 
 + public OutilElectrique() { 
 + this.cadence = 0; 
 +
 + 
 + public boolean isOn(){ 
 + return cadence != 0; 
 +
 + 
 + public void switchOff() { 
 + cadence = 0; 
 +
 + 
 + public abstract void switchOn();​ 
 + 
 + @Override 
 + public String toString() { 
 + return "​OutilElectrique [cadence="​ + cadence + "​]";​ 
 +
 + 
 +
 +</​code>​ 
 + 
 +Pour la classe qui étend :  
 + 
 +<code java> 
 +public class TailleHaie extends OutilElectrique{ 
 + 
 + public void switchOn() { 
 + this.setCadence(4500);​ 
 +
 + 
 + //​Constructeur 
 + public TailleHaie(){ 
 + this.setCadence(0);​ 
 +
 +
 +</​code>​ 
 +))
   - Réécrire ​ en  conséquence ​ les classes ​ ''​TailleHaie''​ et ''​Tondeuse''​.  ​   - Réécrire ​ en  conséquence ​ les classes ​ ''​TailleHaie''​ et ''​Tondeuse''​.  ​
   - Relancer vos tests **sans les modifier**! Ils doivent toujours fonctionner!   - Relancer vos tests **sans les modifier**! Ils doivent toujours fonctionner!
  
-==== Spécialisation et Enuméré (10 mn) ====+<​accordion ​ collapsed="​true">​ 
 +/* ---------------- 
 +*/ 
 +<panel title="​Facultatif sur les énumérés" ​ > 
 +==== (Facultatif) ​Spécialisation et Enuméré ​ (10 mn) ====
 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. 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//, ... 
Line 181: Line 241:
   ​   ​
 <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>​
 +
 +</​panel>​
 +</​accordion>​
 ==== Utiliser ​ une classe (25mn) ==== ==== Utiliser ​ une classe (25mn) ====
  
Line 194: Line 257:
   - Compléter ​ les codes correspondants.   - Compléter ​ les codes correspondants.
   - Eventuellement par reverse-engineering,​ reconstruisez votre modèle.   - Eventuellement par reverse-engineering,​ reconstruisez votre modèle.
-  - Evidemment tester votre programme. Voici un exemple de trace possible à l'​exécution des tests.+  - Evidemment tester votre programme. Voici un exemple de trace possible à l'​exécution des tests. ​
 <​code>​ <​code>​
 =========================TESTS Jardinier =================== =========================TESTS Jardinier ===================
Line 209: Line 272:
  
  
-<note warning>Cela fait 1hSi vous avez mis plus d'une heure pour arriver là vous êtes en retard ! </note>+Pour vous aider :  
 +  * Vous ne pouvez pas modifier le nom du Jardinier donc vous devez lui donner un nom à la création, pour cela vous créez un constructeur :  
 +<code> 
 + public Jardinier(String nom) { 
 + this.nom = nom; 
 +
 +</​code>​ 
 +  * Pour créer un jardinier maintenant, ​vous devez lui donner un nom. 
 +<​code>​ 
 +Jardinier monJardinier = new Jardinier("​R2-D2"​);​ 
 +</​code>​ 
 +  * Pour visualiser un objet java, vous pouvez redéfinir son affichage ​en implémenentant une méthode ''​String ToString()''​ par exemple :  
 +<code> 
 + public String toString() { 
 + String s = "Je suis " +  nom ; 
 + if (outil== null) 
 + s += " : je n'ai pas d'​outil "; 
 + else 
 + s += ", je tiens : " +  outil ; 
 + return s; 
 + }
  
 +</​code>​
 ===== Allons plus loin ===== ===== Allons plus loin =====
  
2017_2018/s2/td/td_domaine_partie_2.txt · Last modified: 2018/03/05 17:43 by blay