This shows you the differences between two versions of the page.
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 1h. Si 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 ===== | ||