User Tools

Site Tools


2013_2014:s2:td:corrections:td_classes-code

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
2013_2014:s2:td:corrections:td_classes-code [2014/02/15 20:26]
blay [Reverse et agrégation]
2013_2014:s2:td:corrections:td_classes-code [2014/03/17 18:03]
blay [La classe ''Polygone'']
Line 1: Line 1:
 ====== Corrections : modélisation et codage ====== ====== Corrections : modélisation et codage ======
  
-===== Exercices d'​entrainement ===== 
  
-==== Classe : Code et modélisation ==== 
  
-=== Classe ''​TailleHaie''​ ===+===== 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. 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 ''​Tondeuse''​ ===+==== Classe ''​Tondeuse'' ​====
  
 <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 "​protected"​. 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"​.
Line 143: Line 143:
 </​code>​ </​code>​
   ​   ​
-=== Tester ===+==== Tester ​====
  
 <​code>​ <​code>​
Line 200: Line 200:
 </​code>​ </​code>​
  
-=== Utiliser ​ une classe ===+==== Utiliser ​ une classe ​====
  
 Diagramme UML avant génération du code Diagramme UML avant génération du code
Line 254: Line 254:
   
 } }
 +</​code>​
 +
 +<code java>
  
 package outilsPK; package outilsPK;
Line 319: Line 322:
  
    
-==== Reverse ​et agrégation ​====+==== 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 : La classe ''​Point''​ ===+<code java> 
 +package outilsPK;
  
-{{ :​2013_2014:​s2:​td:​corrections:​polygonev0.png?​nolink&​200 |}}+public enum Vitesse ​{ 
 + arret, lent, moyen, rapide 
 +} 
 +</​code>​
  
 +<code java>
 +package outilsPK;
  
-=== La classe ''​Polygone''​ ===+public class Tondeuse extends OutilElectrique {
  
-Un polygone est composé d'un ensemble de points.+ 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>​ 
 + 
 + 
 +<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();​td.switchOff();​ 
 + assertEquals(0,​ 
 +                th.getCadence());​ 
 + assertEquals(0,​ 
 +                td.getCadence());​ 
 +
 + 
 + @Test 
 + public void testSwitchOff_On_Off() { 
 + testSwitchOff();​ 
 + testSwitchOnTondeuse();​ 
 + testSwitchOnTailleHaie();​ 
 + testSwitchOff();​ 
 +
 +
 +</​code>​ 
 +===== Reverse et agrégation ===== 
 + 
 +==== Reverse : La classe ''​Point''​ ==== 
 + 
 +{{ :​2013_2014:​s2:​td:​corrections:​polygonev0.png?​nolink&​400 |}} 
 + 
 + 
 +==== La classe ​ Chemin ==== 
 +<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 "​Chemin [depart="​ + depart + ", arrivee="​ + arrivee + "​]";​ 
 +
 +  
 +  
 +
 +</​code>​ 
 + 
 +<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,​-2),​ new Point(5,​3));​ 
 +    } 
 +  
 +  
 + @Test 
 + public void testDistance() { 
 + System.out.println(c.distance());​ 
 + assertEquals(13.0,​c.distance(),​DELTA);​  
 +
 + 
 +
 +</​code>​ 
 +==== La classe ​ Trajet ==== 
 + 
 +<code java> 
 +package trajetPK; 
 +public class MauvaisTrajetException extends Exception { 
 +
 +</​code>​ 
 + 
 +<code java> 
 +package trajetPK; 
 + 
 +import java.util.*;​ 
 + 
 +public class Trajet { 
 + 
 + ArrayList<​Chemin>​ chemins; 
 + 
 + public Trajet(ArrayList<​Chemin>​ chemins) throws MauvaisTrajetException { 
 + super();​ 
 + this.chemins = chemins; 
 + Iterator<​Chemin>​ it = 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 "​Trajet [chemins="​ + chemins + "​]";​ 
 +
 +
 +</​code>​ 
 + 
 +<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,​-2),​ new Point(5,3) ); 
 + 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<​Chemin>​(Arrays.asList(new Chemin[]{ c1, c2, c3 }))); 
 + System.out.println(trValide);​ 
 +
 + @Test 
 + public void testUn() throws MauvaisTrajetException { 
 + trUn = new Trajet (  
 + new ArrayList<​Chemin>​(Arrays.asList(new Chemin[]{ c1}))); 
 +
 + @Test(expected = MauvaisTrajetException.class) ​  
 + public void testInvalide() throws MauvaisTrajetException { 
 +   trInvalide = new Trajet (  
 + new ArrayList<​Chemin>​(Arrays.asList(new Chemin[]{ c1, c3 }))); 
 +
 +</​code>​ 
 + 
 + 
 + 
 +{{ :​2013_2014:​s2:​td:​corrections:​trajet.png?​nolink&​500 |}} 
 +==== La classe ''​Polygone''​ ==== 
 + 
 +Un polygone est composé d'un ensemble de points. ​J'ai utilisé de suite une liste de points qui permet de supporter le addPoint. Mais si j'​avais utilisé un tableau, alors j'​aurais modifié ma classe dans l'​exercice suivant pour supporter le addPoint. C'est trop tard ;-)
  
 <code java> <code java>
Line 354: Line 617:
  return "​Polygone [_points="​ + pointsAsString + "​]";​  return "​Polygone [_points="​ + pointsAsString + "​]";​
  }  }
 +
 + /**
 +
 + * @param p
 + */
 + public void addPoint(Point p) {
 + _points.add(p);​
 + }
 +
   
   
Line 359: Line 631:
 </​code>​ </​code>​
  
-=== 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   +  * 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.  ​
-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. 
2013_2014/s2/td/corrections/td_classes-code.txt · Last modified: 2014/03/17 18:04 by blay