La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

© Philippe GENOUDUJF Février 2001 1 DESS CCI POO-JAVA TD n°7 exercice n°1.

Présentations similaires


Présentation au sujet: "© Philippe GENOUDUJF Février 2001 1 DESS CCI POO-JAVA TD n°7 exercice n°1."— Transcription de la présentation:

1 © Philippe GENOUDUJF Février DESS CCI POO-JAVA TD n°7 exercice n°1

2 © Philippe GENOUDUJF Février Donner les lieux de définition des methodes et la nature de celles-ci (abstraite, définition,redéfinition) abstraite définition redéfinition Figure OuverteFermée EllipsePolygone RégulierRectangleTriangleCercle Polyligne Bezier Segment dessiner périmètre remplir dessiner périmètre remplir dessiner périmètre remplir dessiner couleur déplacer dessiner nbCotes périmètre position remplir setCouleur dessiner couleur déplacer dessiner position setCouleur périmètre remplir périmètre remplir dessiner nbCotés Figure OuverteFermée Polygone Régulier périmètre remplir dessiner

3 © Philippe GENOUDUJF Février Justifications l Pourquoi pas une classe concrète pour Polygone ? l On aurait pu faire une classe concrète pour Polygone, mais cela aurait imposé d avoir dans sa définition une structure de données pour représenter le Polygone (une liste de Points ou de Vecteurs pour définir ses sommets). Du coup, toutes les sous classes de polygone auraient héritées de cette structure et auraient du faire avec alors que pour certaines on pourrait imaginer une représentation plus efficace (par exemple pour les polygones réguliers, en supposant quil n y a pas de rotation, il suffit de donner la longueur des cotés). C est pour ne pas avoir cette contrainte que l on préfère définir Polygone comme classe abstraite. Du coup son nom n est peut être pas tout à fait adéquat. Il vaudrait mieux proposer la hiérarchie suivante, qui accepterait une classe Polygone concrète. Polygone RégulierRectangleTriangle périmètre remplir dessiner périmètre remplir dessiner nbCotés FigurePolygonale RégulierPolygone périmètre remplir dessiner

4 © Philippe GENOUDUJF Février Jusfications l La cas de Régulier l Régulier définie en tant que classe abstraite (ou concrète d ailleurs, ce qui serait aussi envisageable) pose problème. En effet quid des carrés et des triangles équilatéraux. Si Régulier est une classe ils ne peuvent être à la fois Rectangle et Régulier (ou Triangle est Régulier). Cest pourquoi on préférera une interface pour Régulier. Ainsi on pourra définir Carré comme une sous classe de Rectangle qui implémente l interface Régulier. Polygone RectangleTriangle longueurCôté périmètre remplir dessiner périmètre remplir dessiner nbCotés Polygone Régulier Carré périmètre remplir dessiner longueurCoté Equilatéral périmètre remplir dessiner longueurCoté implémente

5 © Philippe GENOUDUJF Février Indiquer les resultats de la compilation des instructions Figure OuverteFermée EllipsePolygone RégulierRectangleTriangleCercle Polyligne Bezier Segment dessiner périmètre remplir dessiner périmètre remplir dessiner périmètre remplir dessiner couleur déplacer dessiner position setCouleur périmètre remplir périmètre remplir dessiner nbCotés Figure OuverteFermée Polygone Régulier Figure f; Ouverte fo; Polygone p,p1; Rectangle r,r1; Fermée ff; Triangle t; Segment s; Polyligne pll; Régulier pr; 1fo = new Ouverte();6f = p; 2pr = new Regulier();7ff= new Rectangle(); 3s = new Triangle();8pr = p; 4p = s;9f = t; 5int x = fo.nbCotes();10double y = f.périmètre();

6 © Philippe GENOUDUJF Février Donner l affichage produit OuverteFermée EllipsePolygone RégulierRectangleTriangleCercle Polyligne Bezier Segment Figure OuverteFermée Polygone Régulier public void afficher() { System.out.println(«figure»); } ->«figure_ouverte»->«figure_fermée» ->«polyligne» ->«polygone» ->«triangle» r = new Rectangle(); t = new Triangle(); fo = new Segment(); ff = new Ellipse(); p1 = new Rectangle(); pll = new Polyligne(); c =new Cercle(); Figure f; Ouverte fo; Polygone p,p1; Rectangle r,r1; Fermée ff; Triangle t; Segment s; Polyligne pll; Cercle c; r.afficher(); ff.afficher(); p1.afficher(); f = t; f.afficher() fo.afficher(); pll.afficher(); f = c; fo = pll; f.afficher(); ((Figure) t).afficher(); fo.afficher() ((Ouverte)pll).afficher(); s.afficher(); --> polygone --> fermée --> polygone --> null pointer except --> fig ouverte --> triangle -->polyligne -->fermée --> triangle -->polyligne

7 © Philippe GENOUDUJF Février Ecrire les instructions pour faire les affectations OuverteFermée EllipsePolygone RégulierRectangleTriangleCercle Polyligne Bezier Segment Figure OuverteFermée Polygone Régulier Figure f; Ouverte fo; Polygone p,p1; Rectangle r,r1; Fermée ff; Triangle t; Segment s; Polyligne pll; Cercle c; fo = new Segment(); f = new Triangle(); p1 =new Rectangle(); affecter à f la valeur de fo affecter à p la valeur de f affecter à p la valeur de p1 f = fo ; p = (Polygone) f ; p = p1 ;

8 © Philippe GENOUDUJF Février Donner description de la classe Triangle et des classes nécessaires à sa réalisation Figure Fermée Polygone Triangle périmètre remplir dessiner couleur déplacer dessiner position setCouleur périmètre remplir nbCotés Figure Fermée Polygone import java.awt.*; public abstract class Figure { protected Point pointRef; protected Color c; public abstract void dessiner(Graphics g); public Color couleur() { return c.clone(); } public Point position() { return new Point(pointRef); } public void deplacer(Vecteur v) { pointRef.translation(v); } public void setCouleur(Color c) { this.c = c.clone(); } } Toutes les informations géométriques (Points,Vecteurs) qui décrivent la figure seront exprimées en coordonnées relatives par rapport à ce point de référence.

9 © Philippe GENOUDUJF Février Donner description de la classe Triangle et des classes nécessaires à sa réalisation Figure Fermée Polygone Triangle périmètre remplir dessiner couleur déplacer dessiner position setCouleur périmètre remplir nbCotés Figure Fermée Polygone import java.awt.*; public abstract class Fermée extends Figure { public abstract double périmètre(); public abstract void remplir(Graphics g,Color c); }

10 © Philippe GENOUDUJF Février Donner description de la classe Triangle et des classes nécessaires à sa réalisation Figure Fermée Polygone Triangle périmètre remplir dessiner couleur déplacer dessiner position setCouleur périmètre remplir nbCotés Figure Fermée Polygone import java.awt.*; public abstract class Polygone extends Fermée { protected int nbCotés; public int nbCotés() { return nbCotés; } }

11 © Philippe GENOUDUJF Février Donner description de la classe Triangle et des classes nécessaires à sa réalisation Figure Fermée Polygone Triangle périmètre remplir dessiner couleur déplacer dessiner position setCouleur périmètre remplir nbCotés Figure Fermée Polygone import java.awt.*; public class Triangle extends Polygone { protected Vecteur v1,v2,v3; public Triangle(Point p1,Point p2,Pointp3,Color c) throws Require { if ((new Vecteur(p1,p2)).colineaire(new Vecteur(p2,p3))) throw new Require(« Points alignés »); this.c =c.clone(); nbCotés = 3; pointRef = new Point(...); v1 = new Vecteur(pointRef,p1); v2 = new Vecteur(pointRef,p2); v3 = new Vecteur(pointRef,p3); } Le point de référence est le barycentre du triangle

12 © Philippe GENOUDUJF Février Donner description de la classe Triangle et des classes nécessaires à sa réalisation Figure Fermée Polygone Triangle périmètre remplir dessiner couleur déplacer dessiner position setCouleur périmètre remplir nbCotés Figure Fermée Polygone... public double périmètre() { Point p1 = new Point(pointRef.translation(v1)); Point p2 = new Point(pointRef.translation(v2)); Point p3 = new Point(pointRef.translation(v3)); return p1.distance(p2)+p1.distance(p3)+p2.distance(p3); } public void dessiner(Graphics g) { g.setColor(c); g.draw...; } public void remplir(Graphics g, Color cr) { g.setColor(cr); g.fill...; } } // Triangle

13 © Philippe GENOUDUJF Février Rajouter une classe FigureComplexe Figure OuverteFermée EllipsePolygone RégulierRectangleTriangleCercle Polyligne Bezier Segment dessiner périmètre remplir dessiner périmètre remplir dessiner périmètre remplir dessiner couleur déplacer dessiner position setCouleur périmètre remplir périmètre remplir dessiner nbCotés Figure OuverteFermée Polygone Régulier FigureComplexe ajouter(Figure f) int nbFigures() supprimer(int i) Figure figure(int i)

14 © Philippe GENOUDUJF Février List res = (List) (v.getClass().newInstance()); for (i=0; i < v.size(); i++) { if (! (v.get(i) instanceof Comparable)) throw new NonComparableException("element " + i + "de la liste n'est pas un Comparable"); Comparable elti = (Comparable) v.get(i); for (p = 0; p < res.size(); p++) if (elti.plusPetitQue(res.get(p))) break; res.add(p,elti); } 0 0 i p elti res v


Télécharger ppt "© Philippe GENOUDUJF Février 2001 1 DESS CCI POO-JAVA TD n°7 exercice n°1."

Présentations similaires


Annonces Google