This is an old revision of the document!
Table of Contents
Corrections : modélisation et codage
Exercices d'entrainement
Classe : Code et modélisation
Classe ''TailleHaie''
Un exemple initial de code généré à partir du diagramme ci-après et complété par quelques lignes de code.
package outilsPK; public class TailleHaie { private int _cadence = 4500; public void switchOn() { _cadence = 4500; } public void switchOff() { _cadence = 0; } //Ajoutée pour accéder à la cadence public int get_cadence() { return _cadence; } //non demandée et ne doit pas être accessible private void set_cadence(int cadence) { this._cadence = cadence; } public TailleHaie(){ _cadence = 0; } }
Classe ''Tondeuse''
package outilsPK; public class Tondeuse { private int _cadence = 4500; public void switchOn() { _cadence = 1000; } public void switchOff() { _cadence = 0; } /** * non demandée et ne doit pas être accessible */ private void set_cadence(int aCadence) { throw new UnsupportedOperationException(); } public Tondeuse() { throw new UnsupportedOperationException(); } public int getCadence() { return this._cadence; } }
On remarque alors que l'attribut (variable d'instance) cadence
et la méthode switchOff
sont les mêmes dans les deux classes.
Mise en facteur : OutilElectrique
Voici le code et le modèle en concordance. Il est possible de ne remonter que des méthodes abstraites si vous ne connaissez pas “protected”.
package outilsPK; public abstract class OutilElectrique { private int cadence = 4500; public int get_cadence() { return this.cadence; } public void switchOff() { cadence = 0; } public abstract void switchOn(); protected void setCadence(int cadence){ this.cadence = cadence; } } package outilsPK; public class TailleHaie extends OutilElectrique{ public void switchOn() { this.setCadence(4500); } public TailleHaie(){ this.setCadence(0); } } package outilsPK; public class Tondeuse extends OutilElectrique { public void switchOn() { setCadence(1000); } public Tondeuse() { setCadence(0); } }
Tester
package outilsPK; import static org.junit.Assert.*; import org.junit.Before; import org.junit.Test; public class OutilElectriqueTest { private TailleHaie th; private Tondeuse td; @Before public void setUp() throws Exception { th = new TailleHaie(); td = new Tondeuse(); } @Test public void testSwitchOnTailleHaie() { th.switchOn(); assertEquals(4500, th.getCadence()); } @Test public void testSwitchOnTondeuse() { td.switchOn(); assertEquals(1000, td.getCadence()); } @Test public void testSwitchOff() { th.switchOff();td.switchOff(); assertEquals(0, th.getCadence()); assertEquals(0, td.getCadence()); } @Test public void testSwitchOff_On_Off() { testSwitchOff(); testSwitchOnTondeuse(); testSwitchOnTailleHaie(); testSwitchOff(); } }
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 démarrable 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’outils 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.
- 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.
Reverse et agrégation
Reverse : La classe ''Point''
- Etant données les spécifications suivantes
en omettant tous les accesseurs dessiner la classe Point
correspondante.
La classe ''Polygone''
Un polygone est composé d'un ensemble de points.
- Il est possible de créer un polygone comme un ensemble vide de Points ou en passant un tableau de Points
- Modéliser la classe
Polygone
en UML. - Générer le code. Quelle structure de données utilisez vous? Regarder le code généré …
- Tester votre classe, par exemple en ajoutant une méthode
ToString
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.
- Etendez votre modélisation de la classe
Polygone
en UML. - Générer le code. Quelle structure de données utilisez vous? Regarder le code généré …
- Tester votre classe.
- Que retenez-vous de cet exercice? Quand se fait le choix de la structure?