This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
2013_2014:s2:td:td_classes-code [2014/02/15 21:31] blay [Classe : Code et modélisation] |
2013_2014:s2:td:td_classes-code [2015/04/18 07:43] (current) blay [Classe ''TailleHaie''] |
||
---|---|---|---|
Line 2: | Line 2: | ||
Objectif : Faire un lien direct entre la modélisation des classes et les codes correspondants. | Objectif : Faire un lien direct entre la modélisation des classes et les codes correspondants. | ||
- | ===== Exercices d'entrainement ===== | + | |
- | <note>Inspirés de http://www.fresnel.fr/perso/derrode/poly/</note> | + | <note>Inspirés de http://www.fresnel.fr/perso/derrode/index.html</note> |
<html> | <html> | ||
- | <!-- | + | <!-- |
http://www.fresnel.fr/perso/derrode/poly/TD1_Java.pdf | http://www.fresnel.fr/perso/derrode/poly/TD1_Java.pdf | ||
http://www.fresnel.fr/perso/derrode/poly/TD2_Java.pdf | http://www.fresnel.fr/perso/derrode/poly/TD2_Java.pdf | ||
Line 15: | Line 15: | ||
--!> | --!> | ||
</html> | </html> | ||
- | ==== Classe : Code et modélisation ==== | + | ===== Classe : Code et modélisation ===== |
- | + | <note tip>Les notes de bas de page vous donnent des indications sur certaines actions. Il suffit de laisser la souris sur les renvoies.</note> | |
- | === Classe ''TailleHaie'' === | + | ==== Classe ''TailleHaie'' (10mn) ==== |
Line 25: | Line 25: | ||
- Dessiner la représentation UML de cette classe. | - Dessiner la représentation UML de cette classe. | ||
- | - Générer ou écrivez le code java correspondant à cette classe((Code-> Generateur Immédiat -> Aperçu)). On prévoira un constructeur qui initialisera le tailleHaie dans l’état éteint, avec une cadence de 0. | + | - Générer ou écrivez le code java correspondant à cette classe((Code->Java-roundtrip .. l'objectif est de maintenir la cohérence entre le modèle et le code)). On prévoira un constructeur qui initialisera 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. |
- 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 un main et votre test peut ressembler à ce qui suit. | ||
+ | <code java> | ||
+ | public class TestOutils { | ||
- | <note important> Maintenez le modèle et le code en cohérence((Code -> Java Round-trip)) .</note> | + | public static void main(String[] args) { |
+ | TailleHaie monTailleHaie = new TailleHaie(); | ||
+ | System.out.println("Taille Haie crée : " + monTailleHaie); | ||
+ | System.out.println("==> Test init : " + (monTailleHaie.getCadence() == 0) ); | ||
+ | monTailleHaie.switchOn(); | ||
+ | System.out.println("Cadence du Taille Haie en fonctionnement : " + monTailleHaie.getCadence()); | ||
+ | System.out.println("==> Test fonctionnement : " + (monTailleHaie.getCadence() == 4500) ); | ||
+ | monTailleHaie.switchOff(); | ||
+ | System.out.println("Cadence du Taille Haie à l'arret : " + monTailleHaie.getCadence()); | ||
+ | System.out.println("==> Test Arret : " + (monTailleHaie.getCadence() == 0) ); | ||
+ | |||
+ | } | ||
- | === Classe ''Tondeuse'' === | + | } |
+ | </code> | ||
+ | |||
+ | <note important> Maintenez le modèle et le code en cohérence((Code -> Java Round-trip)) .</note> | ||
+ | ==== Classe ''Tondeuse'' ==== | ||
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 la vitesse de rotation de sa lame, | ||
Line 41: | Line 59: | ||
- | === Mise en facteur : OutilElectrique === | + | ==== Mise en facteur, Spécialisation et énuméré: OutilElectrique ==== |
- 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. | + | - 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'')) |
- Modifier la modélisation et les codes en conséquences. | - Modifier la modélisation et les codes en conséquences. | ||
- Réécrire en conséquence les classes ''TailleHaie'' et ''Tondeuse''. | - Réécrire en conséquence les classes ''TailleHaie'' et ''Tondeuse''. | ||
- | - A la classe Tondeuse uniquement, ajouter un service setVitesse(Vitesse v) dont l’objectif est de fixer la vitesse de traction de la tondeuse (vitesses possibles : arret, lent, moyenne ou rapide). Les Vitesses sont un énuméré. | + | - A la classe Tondeuse uniquement, ajouter un service setVitesse(Vitesse v) dont l’objectif est de fixer la vitesse de traction de la tondeuse (vitesses possibles : arret, lent, moyenne ou rapide). Les Vitesses sont un énuméré ((Créer une //enumeration// dans le modèle, lui ajouter les ''enumerate literal'' //arret//, ... Pour accéder dans votre code par exemple à l'énuméré "arret", vous écrirez par exemple, ''v = Vitesse.arret;'' )) |
- Redessiner le schéma UML de l’ensemble des classes et mettez les codes en cohérence (éteindre la tondeuse passe la vitesse à arrêt). | - Redessiner le schéma UML de l’ensemble des classes et mettez les codes en cohérence (éteindre la tondeuse passe la vitesse à arrêt). | ||
| | ||
- | === Tester === | + | ==== Tester ==== |
- Si vous avez vu les tests unitaires, c'est le moment! Sinon ... | - Si vous avez vu les tests unitaires, c'est le moment! Sinon ... | ||
- Ecrire un programme principal qui crée un ''TailleHaie'' et une ''Tondeuse'' et utilise les services à leur disposition. | - Ecrire un programme principal qui crée un ''TailleHaie'' et une ''Tondeuse'' et utilise les services à leur disposition. | ||
+ | <note tip>N'hésitez pas à ajouter des commentaires dans vos codes, ils sont conservés par le java round-trip! </note> | ||
+ | ==== Utiliser une classe ==== | ||
- | === Utiliser une classe === | + | Il s’agit de créer une représentation UML d’une classe ''Jardinier'' dont les attributs seront le prénom du jardinier et l’outil électrique qu’il doit utiliser pour travailler (un taille haie ou une tondeuse). Au moment de sa création, on suppose que le jardiner n’a pas d’outil en main. L’outil à utiliser sera transmis comme argument à une méthode ''startTravail''(…). Prévoyez également une méthode ''stopTravail''(…). Quand le jardinier stoppe le travail, il ne lâche pas l'outil. |
- | + | ||
- | Il s’agit de créer une représentation UML d’une classe ''Jardinier'' dont les attributs seront le prénom du jardinier et l’outil électrique qu’il doit utiliser pour travailler (un taille haie ou une tondeuse). Au moment de sa création, on suppose que le jardiner n’a pas d’outil en main. L’outil à utiliser sera transmis comme argument à une méthode ''startTravail''(…). Prévoyez également une méthode ''stopTravail''(…). | + | |
- Complétez la représentation UML des liens entre les classes. | - Complétez la représentation UML des liens entre les classes. | ||
- Générer les codes correspondants. Si les résultas ne vous satisfont pas, corriger votre modèle. En particulier, vous devrez utiliser la navigation entre les classes. | - Générer les codes correspondants. Si les résultas ne vous satisfont pas, corriger votre modèle. En particulier, vous devrez utiliser la navigation entre les classes. | ||
Line 64: | Line 82: | ||
- Ecrire un petit programme principal qui teste votre classe : on demande au jardinier de commencer à travailler en lui donnant un taille Haie, qu'il démarre. Puis on lui demande de s'arrêter de travailler. Il arrête le taille Haie, puis le relâche. | - Ecrire un petit programme principal qui teste votre classe : on demande au jardinier de commencer à travailler en lui donnant un taille Haie, qu'il démarre. Puis on lui demande de s'arrêter de travailler. Il arrête le taille Haie, puis le relâche. | ||
- | ==== Reverse et agrégation ==== | + | ===== Reverse et agrégation ===== |
- | === Reverse : La classe ''Point'' === | + | ==== Reverse : La classe ''Point'' ==== |
- Etant données les [[http://docs.oracle.com/javase/7/docs/api/java/awt/Point.html|spécifications suivantes]] en omettant tous les accesseurs dessiner la classe ''Point'' correspondante. Vous pouvez aussi procéder par reverse engineering {{:2013_2014:s2:td:point.java.zip|(classe Point)}} | - Etant données les [[http://docs.oracle.com/javase/7/docs/api/java/awt/Point.html|spécifications suivantes]] en omettant tous les accesseurs dessiner la classe ''Point'' correspondante. Vous pouvez aussi procéder par reverse engineering {{:2013_2014:s2:td:point.java.zip|(classe Point)}} | ||
+ | <note>Et si nous voulions à présent travaillez avec des points en coordonnées polaires, que ferions-nous? </note> | ||
+ | ==== Utilisation d'une classe : Chemin et Trajet ==== | ||
- | === La classe ''Polygone'' === | + | * On définit un chemin comme ayant un point de départ et un point d'arrivée et un intitulé. |
+ | * Un point peut appartenir à plusieurs segments. | ||
+ | * On veut connaitre la distance que représente un chemin. | ||
+ | * Un trajet est une suite ordonnée de chemins tels que le point de départ d'un chemin est le point d'arrivée du chemin suivant. | ||
+ | |||
+ | - Modéliser les concepts de Chemin et de Trajet et codez les. | ||
+ | |||
+ | ==== La classe ''Polygone'' ==== | ||
Un polygone est composé d'un ensemble de points. | Un polygone est composé d'un ensemble de points. | ||
Line 79: | Line 106: | ||
- Tester votre classe, par exemple en ajoutant une méthode ''ToString'' | - Tester votre classe, par exemple en ajoutant une méthode ''ToString'' | ||
- | === La classe ''Polygone'': V2 === | + | ==== La classe ''Polygone'': V2 ==== |
* Pour remplir le tableau de points, on a besoin d'une première méthode ''addPoint'' qui ajoutera un point à ceux déjà présents. | * Pour remplir le tableau de points, on a besoin d'une première méthode ''addPoint'' qui ajoutera un point à ceux déjà présents. | ||
- Etendez votre modélisation de la classe ''Polygone'' en UML. | - Etendez votre modélisation de la classe ''Polygone'' en UML. | ||
Line 87: | Line 114: | ||
+ | <html> | ||
+ | <!-- | ||
==== Faîtes tout seul! ==== | ==== Faîtes tout seul! ==== | ||
Line 93: | Line 122: | ||
* On veut pouvoir créer un triangle en donnant ses trois sommets : new Triangle (p1, p2, p3) | * On veut pouvoir créer un triangle en donnant ses trois sommets : new Triangle (p1, p2, p3) | ||
* On veut pouvoir savoir si un triangle est équilatérale. | * On veut pouvoir savoir si un triangle est équilatérale. | ||
- | * Pour cela vous aurez besoin de calculer la distance d'un point relativement à un autre : AB = \sqrt{(x_B-x_A)^2 + (y_B-y_A)^2} | + | * Pour cela vous aurez besoin de calculer la distance d'un point relativement à un autre. |
* On ne peut pas ajouter un point à un triangle. | * On ne peut pas ajouter un point à un triangle. | ||
- | * | + | |
+ | --!> | ||
+ | </html> |