Classes : modélisation et codage
Objectif : Faire un lien direct entre la modélisation des classes et les codes correspondants.
Classe : Code et modélisation
Les notes de bas de page vous donnent des indications sur certaines actions. Il suffit de laisser la souris sur les renvoies.
Classe ''TailleHaie'' (10mn)
Un taille haie est caractérisé par sa cadence de coupe, typiquement 4500 coupes/minute.
Dessiner la représentation UML de cette classe.
Générer ou écrivez le code java correspondant à cette classe
1). 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
.
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.
public class TestOutils {
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) );
}
}
Maintenez le modèle et le code en cohérence
2) .
Classe ''Tondeuse''
Sur le même modèle, une tondeuse est caractérisée par la vitesse de rotation de sa lame,
typiquement 1000 Tour/minute. On prévoira
Dessiner la représentation UML de cette classe et continuez comme précédemment.
Que constatez-vous? Quels sont les éléments communs? Ne pourrait-on pas “partager” des informations?
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
.
En fonction de vos choix, déterminer s'il s'agit d'une classe abstraite ou non.
3)
Modifier la modélisation et les codes en conséquences.
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é
4)
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
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.
N'hésitez pas à ajouter des commentaires dans vos codes, ils sont conservés par le java round-trip!
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.
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.
Compléter les codes correspondants.
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 : La classe ''Point''
-
Et si nous voulions à présent travaillez avec des points en coordonnées polaires, que ferions-nous?
Utilisation d'une classe : Chemin et Trajet
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.
Modéliser la classe Polygone
en UML.
Il est possible de créer un polygone comme un ensemble vide de Points ou en passant un tableau de Points
Générer le code. Quelle structure de données utilisez vous? Regarder le code généré … Evidemment il n'est pas possible de modifier la classe Point fournie par java. Vous ne devez donc pas la générer.
Tester votre classe, par exemple en ajoutant une méthode ToString
La classe ''Polygone'': V2
Etendez votre modélisation de la classe Polygone
en UML.
Générer le code.
Tester votre classe.
Que retenez-vous de cet exercice? Quand se fait le choix de la structure?