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

DESS CCI POO-JAVA TD n°7 exercice n°1

Présentations similaires


Présentation au sujet: "DESS CCI POO-JAVA TD n°7 exercice n°1"— Transcription de la présentation:

1 DESS CCI POO-JAVA TD n°7 exercice n°1

2 Donner les lieux de définition des methodes et la nature de celles-ci (abstraite, définition,redéfinition) Figure Figure couleur déplacer dessiner nbCotes périmètre position remplir setCouleur couleur déplacer dessiner position setCouleur Ouverte Ouverte Fermée Fermée abstraite définition redéfinition périmètre remplir Segment Polyligne Ellipse Polygone Polygone dessiner dessiner périmètre remplir dessiner nbCotés Bezier Cercle Rectangle Régulier Régulier Triangle dessiner périmètre remplir dessiner périmètre remplir dessiner périmètre périmètre remplir dessiner périmètre remplir dessiner

3 Justifications Pourquoi pas une classe concrète pour Polygone ?
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 qu’il 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. FigurePolygonale Polygone nbCotés Rectangle Régulier Régulier Triangle Polygone périmètre remplir dessiner périmètre périmètre remplir dessiner périmètre remplir dessiner

4 Jusfications La cas de Régulier
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). C’est 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 Polygone nbCotés Rectangle Triangle périmètre remplir dessiner périmètre remplir dessiner implémente <interface> Régulier longueurCôté Carré Equilatéral périmètre remplir dessiner longueurCoté périmètre remplir dessiner longueurCoté

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

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

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

8 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 position setCouleur nbCotés 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 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 position setCouleur nbCotés 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 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 position setCouleur nbCotés import java.awt.*; public abstract class Polygone extends Fermée { protected int nbCotés; public int nbCotés() { return nbCotés; }

11 Le point de référence est le barycentre du triangle
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 position setCouleur nbCotés Le point de référence est le barycentre du triangle 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); }

12 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 position setCouleur nbCotés ... 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 Rajouter une classe FigureComplexe
couleur déplacer dessiner position setCouleur FigureComplexe ajouter(Figure f) int nbFigures() supprimer(int i) Figure figure(int i) Ouverte Ouverte Fermée Fermée périmètre remplir Segment Polyligne Ellipse Polygone Polygone dessiner dessiner périmètre remplir dessiner nbCotés Bezier Cercle Rectangle Régulier Régulier Triangle dessiner périmètre remplir dessiner périmètre remplir dessiner périmètre périmètre remplir dessiner

14 v i elti 4 1 4 7 2 5 res p 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); }


Télécharger ppt "DESS CCI POO-JAVA TD n°7 exercice n°1"

Présentations similaires


Annonces Google