2013_2014:s2:td:corrections:td_classes-code
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
2013_2014:s2:td:corrections:td_classes-code [2014/02/14 22:07] – [Classe : Code et modélisation] blay | 2013_2014:s2:td:corrections:td_classes-code [2014/03/17 16:59] – [La classe ''Polygone'': V2] blay | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Corrections : modélisation et codage ====== | ====== Corrections : modélisation et codage ====== | ||
- | ===== Exercices d' | ||
- | ==== Classe : Code et modélisation ==== | ||
- | === Classe '' | + | ===== Classe : Code et modélisation ===== |
+ | |||
+ | ==== Classe '' | ||
Un exemple initial de code généré à partir du diagramme ci-après et complété par quelques lignes de code. | Un exemple initial de code généré à partir du diagramme ci-après et complété par quelques lignes de code. | ||
Line 46: | Line 46: | ||
- | === Classe '' | + | ==== Classe '' |
<code java> | <code java> | ||
Line 83: | Line 83: | ||
- | === Mise en facteur : OutilElectrique | + | ==== 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 " | 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 " | ||
Line 143: | Line 143: | ||
</ | </ | ||
| | ||
- | === Tester === | + | ==== Tester |
< | < | ||
Line 200: | Line 200: | ||
</ | </ | ||
- | === Utiliser | + | ==== Utiliser |
+ | |||
+ | Diagramme UML avant génération du code | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Puis on génére et compléte la classe '' | ||
+ | |||
+ | <code java> | ||
+ | package outilsPK; | ||
+ | |||
+ | public class Jardinier { | ||
+ | |||
+ | protected OutilElectrique getOutil() { | ||
+ | return outil; | ||
+ | } | ||
+ | |||
+ | |||
+ | protected String getPrenom() { | ||
+ | return prenom; | ||
+ | } | ||
+ | |||
+ | |||
+ | private OutilElectrique outil; | ||
+ | private String prenom; | ||
+ | |||
+ | /** | ||
+ | * | ||
+ | * @param outil | ||
+ | */ | ||
+ | public void startTravail(OutilElectrique outil) { | ||
+ | if (this.outil != null) | ||
+ | this.outil.switchOff(); | ||
+ | this.outil = outil; | ||
+ | outil.switchOn(); | ||
+ | } | ||
+ | |||
+ | public void stopTravail() { | ||
+ | outil.switchOff(); | ||
+ | outil = null; | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public String toString() { | ||
+ | return " | ||
+ | } | ||
+ | |||
+ | public Jardinier(String prenom) { | ||
+ | this.prenom = prenom; | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | <code java> | ||
+ | |||
+ | package outilsPK; | ||
+ | |||
+ | import static org.junit.Assert.*; | ||
+ | |||
+ | package outilsPK; | ||
+ | |||
+ | import static org.junit.Assert.*; | ||
+ | |||
+ | import org.junit.Before; | ||
+ | import org.junit.Test; | ||
+ | |||
+ | public class JardinierTest { | ||
+ | private TailleHaie th; | ||
+ | private Tondeuse td; | ||
+ | private Jardinier j; | ||
+ | |||
+ | @Before | ||
+ | public void setUp() throws Exception { | ||
+ | th = new TailleHaie(); | ||
+ | td = new Tondeuse(); | ||
+ | j = new Jardinier(" | ||
+ | } | ||
+ | |||
+ | |||
+ | //A revoir car trop de tests en un. | ||
+ | @Test | ||
+ | public void testJardinerTravaille() { | ||
+ | assertEquals(null, | ||
+ | j.getOutil()); | ||
+ | j.startTravail(th); | ||
+ | assertEquals(th, | ||
+ | j.getOutil()); | ||
+ | // le tailleHaie a été démarré | ||
+ | assertEquals(4500, | ||
+ | |||
+ | j.startTravail(td); | ||
+ | // On a bien éteint le tailleHaie | ||
+ | assertEquals(0, | ||
+ | assertEquals(td, | ||
+ | j.getOutil()); | ||
+ | |||
+ | j.stopTravail(); | ||
+ | assertEquals(null, | ||
+ | j.getOutil()); | ||
+ | assertEquals(0, | ||
+ | td.getCadence()); | ||
+ | } | ||
+ | |||
+ | @Test | ||
+ | public void testPrenom() { | ||
+ | assertEquals(" | ||
+ | j.getPrenom()); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | Revoici le diagramme UML après reverse... | ||
+ | |||
+ | |||
+ | {{ : | ||
- | Il s’agit | ||
- | du jardinier | ||
- | - Complétez | ||
- | - Générer les codes correspondants. Si les résultas ne vous satisfont pas, corriger votre modèle. En particulier, | ||
- | - Compléter | ||
- | - Ecrire un petit programme | ||
+ | ==== Gérer la vitesse : spécialisation de classes et enuméré ==== | ||
+ | On ajoute la vitesse comme un enumerate dans le modèle et les méthodes demandées puis on met à jour les codes. | ||
- | ==== Reverse et agrégation ==== | + | <code java> |
+ | package outilsPK; | ||
- | === Reverse : La classe '' | + | public enum Vitesse { |
+ | arret, lent, moyen, rapide | ||
+ | } | ||
+ | </ | ||
- | - Etant données les [[http:// | + | < |
- | en omettant tous les accesseurs dessiner la classe '' | + | package outilsPK; |
+ | public class Tondeuse extends OutilElectrique { | ||
- | === La classe '' | + | private Vitesse vitesse ; |
+ | |||
+ | protected Vitesse getVitesse() { | ||
+ | return vitesse; | ||
+ | } | ||
+ | |||
+ | public void switchOn() { | ||
+ | setCadence(1000); | ||
+ | } | ||
+ | |||
+ | public Tondeuse() { | ||
+ | setCadence(0); | ||
+ | vitesse = Vitesse.arret; | ||
+ | } | ||
+ | |||
+ | public void setVitesse(Vitesse v){ | ||
+ | vitesse = v; | ||
+ | } | ||
+ | |||
+ | |||
+ | public void switchOff() { | ||
+ | super.switchOff(); | ||
+ | vitesse = Vitesse.arret; | ||
+ | } | ||
+ | |||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | <code java> | ||
+ | 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 testVitesseTondeuse() { | ||
+ | td.switchOn(); | ||
+ | td.setVitesse(Vitesse.moyen); | ||
+ | assertEquals(Vitesse.moyen, | ||
+ | td.getVitesse()); | ||
+ | td.switchOff(); | ||
+ | assertEquals(Vitesse.arret, | ||
+ | td.getVitesse()); | ||
+ | } | ||
+ | |||
+ | |||
+ | @Test | ||
+ | public void testSwitchOff() { | ||
+ | th.switchOff(); | ||
+ | assertEquals(0, | ||
+ | th.getCadence()); | ||
+ | assertEquals(0, | ||
+ | td.getCadence()); | ||
+ | } | ||
+ | |||
+ | @Test | ||
+ | public void testSwitchOff_On_Off() { | ||
+ | testSwitchOff(); | ||
+ | testSwitchOnTondeuse(); | ||
+ | testSwitchOnTailleHaie(); | ||
+ | testSwitchOff(); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | ===== Reverse et agrégation ===== | ||
+ | |||
+ | ==== Reverse : La classe '' | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | ==== La classe | ||
+ | <code java> | ||
+ | package trajetPK; | ||
+ | |||
+ | import java.awt.*; | ||
+ | |||
+ | public class Chemin { | ||
+ | |||
+ | Point depart; | ||
+ | Point arrivee; | ||
+ | |||
+ | /** | ||
+ | * | ||
+ | * @param depart | ||
+ | * @param arrivee | ||
+ | */ | ||
+ | public Chemin(Point depart, Point arrivee) { | ||
+ | this.depart = depart; | ||
+ | this.arrivee = arrivee; | ||
+ | } | ||
+ | public double distance() { | ||
+ | int y = arrivee.y - depart.y; | ||
+ | int x = arrivee.x - depart.x; | ||
+ | return Math.sqrt( y*y + x*x); | ||
+ | } | ||
+ | @Override | ||
+ | public String toString() { | ||
+ | return " | ||
+ | } | ||
+ | |||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | <code java> | ||
+ | package trajetPK; | ||
+ | |||
+ | import static org.junit.Assert.*; | ||
+ | |||
+ | import java.awt.Point; | ||
+ | |||
+ | import org.junit.Before; | ||
+ | import org.junit.Test; | ||
+ | |||
+ | |||
+ | public class CheminTest { | ||
+ | private static final double DELTA = 1e-15; | ||
+ | Chemin c ; | ||
+ | |||
+ | @Before | ||
+ | public void setUp() throws Exception { | ||
+ | c = new Chemin(new Point(-7, | ||
+ | } | ||
+ | |||
+ | |||
+ | @Test | ||
+ | public void testDistance() { | ||
+ | System.out.println(c.distance()); | ||
+ | assertEquals(13.0, | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | ==== La classe | ||
+ | |||
+ | <code java> | ||
+ | package trajetPK; | ||
+ | public class MauvaisTrajetException extends Exception { | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | <code java> | ||
+ | package trajetPK; | ||
+ | |||
+ | import java.util.*; | ||
+ | |||
+ | public class Trajet { | ||
+ | |||
+ | ArrayList< | ||
+ | |||
+ | public Trajet(ArrayList< | ||
+ | super(); | ||
+ | this.chemins = chemins; | ||
+ | Iterator< | ||
+ | if (!(it.hasNext())) | ||
+ | throw new MauvaisTrajetException(); | ||
+ | Chemin courant = it.next(); | ||
+ | Chemin suivant; | ||
+ | while (it.hasNext()) { | ||
+ | suivant = it.next(); | ||
+ | if (courant.arrivee.equals(suivant.depart)) | ||
+ | courant = suivant; | ||
+ | else | ||
+ | throw new MauvaisTrajetException(); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public String toString() { | ||
+ | return " | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | <code java> | ||
+ | package trajetPK; | ||
+ | |||
+ | import static org.junit.Assert.*; | ||
+ | |||
+ | import java.awt.Point; | ||
+ | import java.util.ArrayList; | ||
+ | import java.util.Arrays; | ||
+ | |||
+ | import org.junit.Before; | ||
+ | import org.junit.Test; | ||
+ | |||
+ | public class TrajetTest { | ||
+ | |||
+ | private static final double DELTA = 1e-15; | ||
+ | Trajet trValide ; | ||
+ | Trajet trUn ; | ||
+ | Trajet trInvalide ; | ||
+ | Chemin c1 ; | ||
+ | Chemin c2 ; | ||
+ | Chemin c3; | ||
+ | @Before | ||
+ | public void setUp() throws Exception { | ||
+ | c1 = new Chemin(new Point(-7, | ||
+ | c2 = new Chemin(new Point(5,3), new Point(7,5) ); | ||
+ | c3 = new Chemin(new Point(7,5) , new Point(9,11) ); | ||
+ | } | ||
+ | |||
+ | |||
+ | @Test | ||
+ | public void testCreerValide() throws MauvaisTrajetException { | ||
+ | trValide = new Trajet ( | ||
+ | new ArrayList< | ||
+ | System.out.println(trValide); | ||
+ | } | ||
+ | @Test | ||
+ | public void testUn() throws MauvaisTrajetException { | ||
+ | trUn = new Trajet ( | ||
+ | new ArrayList< | ||
+ | } | ||
+ | @Test(expected = MauvaisTrajetException.class) | ||
+ | public void testInvalide() throws MauvaisTrajetException { | ||
+ | trInvalide = new Trajet ( | ||
+ | new ArrayList< | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | {{ : | ||
+ | ==== La classe '' | ||
Un polygone est composé d'un ensemble de points. | 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 | + | <code java> |
+ | package geometrie; | ||
- | - Modéliser la classe '' | + | import java.util.ArrayList; |
- | - Générer le code. Quelle structure de données utilisez vous? Regarder le code généré | + | import java.util.Arrays; |
- | | + | import java.awt.Point; |
+ | |||
+ | public class Polygone { | ||
+ | public ArrayList< | ||
+ | |||
+ | public Polygone() { | ||
+ | } | ||
+ | |||
+ | public Polygone(Point[] points) { | ||
+ | _points = new ArrayList< | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public String toString() { | ||
+ | String pointsAsString =" "; | ||
+ | for(Point p : _points) | ||
+ | | ||
+ | return " | ||
+ | } | ||
+ | |||
+ | /** | ||
+ | * | ||
+ | * @param p | ||
+ | */ | ||
+ | public void addPoint(Point p) { | ||
+ | _points.add(p); | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | } | ||
+ | </ | ||
- | === La classe '' | + | ==== La classe '' |
- | * Pour | + | * Pour |
- | point à ceux déjà | + | |
- Etendez votre modélisation de la classe '' | - Etendez votre modélisation de la classe '' |
2013_2014/s2/td/corrections/td_classes-code.txt · Last modified: 2014/03/17 17:04 by blay