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
2017_2018:s2:td:td_domaine_partie_2 [2018/02/18 20:07]
blay [Mise en facteur et Spécialisation : OutilElectrique (10mn)]
2017_2018:s2:td:td_domaine_partie_2 [2018/03/05 17:43] (current)
blay [Utiliser une classe (25mn)]
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 117: 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 145: 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-classes,​ vous devez donc 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-classes,​ vous 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 177: 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 190: 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 205: 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 class Jardinier{ 
 +        // Un constructeur qui prend le nom en parametre 
 + 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.1518980861.txt.gz · Last modified: 2018/02/18 20:07 by blay