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:07]
blay [Mise en facteur et Spécialisation : OutilElectrique (10mn)]
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 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 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