This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
2017_2018:s2:td:td_domaine_partie_2 [2018/02/11 03:01] blay [Classes : modélisation et codage] |
2017_2018:s2:td:td_domaine_partie_2 [2018/03/04 17:10] blay [Classes : modélisation et codage] |
||
---|---|---|---|
Line 7: | Line 7: | ||
- Savoir construire un petit modèle de classes et le mettre en oeuvre. | - Savoir construire un petit modèle de classes et le mettre en oeuvre. | ||
- | <note>Ce TD est évalué sur toute sa durée et plus spécifiquement sur le dernier exercice.</note> | ||
- | === Je comprends (10 mn) === | + | <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. | ||
+ | </callout> | ||
===== Classe : Code et modélisation ===== | ===== Classe : Code et modélisation ===== | ||
<note tip> | <note tip> | ||
Line 21: | Line 24: | ||
<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 32: | Line 40: | ||
--!> | --!> | ||
</html> | </html> | ||
- | ==== Classe ''TailleHaie'' (10mn) ==== | + | ==== Classe ''TailleHaie'' (20mn) ==== |
- | Un taille haie est caractérisé par sa cadence de coupe, typiquement 4500 coupes/minute. | + | Un taille haie est caractérisé par |
- | * switchOn()+: méthode qui allume l’outil et fixe la cadence à 4500. | + | * sa cadence de coupe, typiquement 4500 coupes/minute; |
+ | * switchOn()+: méthode qui allume l’outil et fixe la cadence à 4500; | ||
* switchOff()+: méthode qui éteint l’outil et fixe la cadence à 0. | * switchOff()+: méthode qui éteint l’outil et fixe la cadence à 0. | ||
- Dessiner la représentation UML de cette classe. | - Dessiner la représentation UML de cette classe. | ||
- | - [[http://mbf-iut.i3s.unice.fr/doku.php?id=modelio#generer_les_codes|Générer]] ou écrivez le code java correspondant à cette classe. On prévoira un constructeur qui initialise le tailleHaie dans l’état éteint, avec une cadence de 0. 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. | + | - [[http://mbf-iut.i3s.unice.fr/doku.php?id=modelio#generer_les_codes|Générer]] ou écrivez le code java correspondant à cette classe. On prévoira un constructeur ((Si votre classe s'appelle TailleHaie, le constructeur a pour nom le nom de la classe dans un fichier ''TailleHaie.java'')) qui initialise le tailleHaie dans l’état éteint, avec une cadence de 0(( |
+ | <code java> | ||
+ | public class TailleHaie { | ||
+ | private int cadence = 4500; | ||
+ | |||
+ | //Accesseur en lecture | ||
+ | public int getCadence() { | ||
+ | return this.cadence; | ||
+ | } | ||
+ | |||
+ | public void switchOff() { | ||
+ | cadence = 0; | ||
+ | } | ||
+ | |||
+ | public void switchOn() { | ||
+ | cadence = 4500; | ||
+ | } | ||
+ | |||
+ | |||
+ | //Constructeur | ||
+ | public TailleHaie(){ | ||
+ | this.setCadence(0); | ||
+ | } | ||
+ | } | ||
+ | </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. | ||
- 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 65: | Line 98: | ||
<code java> | <code java> | ||
+ | import org.junit.Before; | ||
+ | import org.junit.Test; | ||
+ | |||
public class TailleHaieTest { | public class TailleHaieTest { | ||
Line 91: | Line 127: | ||
} | } | ||
</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. | + | * 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 119: | 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 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-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 151: | 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 178: | Line 271: | ||
- Et si nous voulions représenter plusieurs sortes de Robot, que ferions-nous? Et si tout robot était un Outil Electrique ? | - Et si nous voulions représenter plusieurs sortes de Robot, que ferions-nous? Et si tout robot était un Outil Electrique ? | ||
- | |||
- | <note warning>Cela fait 1h. Si vous avez mis plus d'une heure pour arriver là vous êtes en retard ! </note> | ||
===== Allons plus loin ===== | ===== Allons plus loin ===== |