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

Slides:



Advertisements
Présentations similaires
Cours n° 4 Objets, classes, interfaces et héritage
Advertisements

TYPES DE PROBLÈMES EN GÉOMÉTRIE
Spécialisation/généralisation Héritage Polymorphisme.
Spécialisation/généralisation Héritage Polymorphisme
Le mécanisme des exceptions
Introduction à la programmation objet Langage Java
Approfondissement du langage
(Classes prédéfinies – API Java)
F. Voisin : Introduction à Java 1 Introduction à Java - les interfaces - Frédéric VOISIN FIIFO - « Remise à Niveau »
F. Voisin : Introduction à Java 1 Introduction à Java - lhéritage - Frédéric VOISIN FIIFO - « Remise à Niveau »
Tarak Chaari, Stéphane Frénot, Frédérique Laforest, Frédéric Le-Mouël JAV1 JAV – TD 5 Lhéritage en Java.
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
Introduction à la programmation (420-PK2-SL) cours 15 Gestion des applications Technologie de linformation (LEA.BW)
Leçon 3 : Héritage IUP 2 Génie Informatique
Chapitre IV Object, interfaces, classes imbriquées.
Structures collectives en Java
Programmation orientée objet
Analyse et Conception orientée objet
Faculté I&C, Claude Petitpierre, André Maurer 1 Java.
Écouteurs de click d'une fenêtre
Langage Oriente Objet Cours 4.
POO-L3 H. Fauconnier1 C) Méthodes: Redéfinition Un classe hérite des méthodes des classes ancêtres Elle peut ajouter de nouvelles méthodes Elle peut surcharger.
IFT1025, Programmation 2 Jian-Yun Nie
Langage Oriente Objet Cours 3.
Classes abstraites et Interfaces
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
Introduction à la programmation objet Langage Java
Introduction au paradigme orienté-objet (suite)
Design Pattern: Decorator
1 Les paquetages («packages»). 2 L'objectif avec les paquetages («packages») est de rendre accessibles aux utilisateurs des classes définies par d'autres.
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Chapitre 9 Les sous-programmes.
Formation Développeur Java Programmation objet avec JAVA Partie 2
Chapitre III Héritage. POO-L3 H. Fauconnier2 Chapitre III: Héritage A) Extensions généralités Affectation et transtypage B) Méthodes Surcharge et signature.
Chapitre III Héritage. POO-L3 H. Fauconnier2 Chapitre III: Héritage A) Extensions généralités Affectation et transtypage B) Méthodes Surcharge et signature.
Cours 4 Héritage (suite).
Cours 5 Héritage, Interfaces, classes internes. POO-L3 H. Fauconnier2 La classe Object Toutes les classes héritent de la classe Object Object méthodes:
COURS DE PROGRAMMATION ORIENTEE OBJET :
Les pointeurs en C. valeur : main () { float valeur; void* pointeur; }
1 Fonction : surcharge de sélection La surcharge de sélection consiste à implanter plusieurs méthodes de même nom dans une même classe à condition que.
C++ : fonctions et opérateurs
Java, les objets : tout de suite ! Rassembler, grouper les objets
99 Réutilisation du code grâce à l'héritage. 9-2 Objectifs À la fin de ce cours, vous serez capables de : Définir l'héritage Utiliser l'héritage pour.
JE CONNAIS LE NOM DES POLYGONES
Héritage Licence Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier.
Héritage et composition
Objectifs À la fin de ce cours, vous serez capables de :
4 Introduction des objets. Les chaînes et tableaux
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
La notion de type revisitée en POO
11/04/ L'héritage Cours 7 Cours 7.
Cours 7 Classes locales Clonage Divers: tableaux.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Les erreurs communes en Java.
Interfaces graphiques. Composants d'interface utilisateur graphique (GUI) 1 Bibliothèques Awt et Swing Procédures communes pour l'utilisation de ces clases.
Cours C++ Fonctions Surcharge d’opérateurs Passage d’arguments
Tutorat en bio-informatique
Les polygones (5) Définition d’un polygone
Les classes présenté par: RAHMOUNE RIME / ZEKRI SELMA.
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
Le polymorphisme.
Cours du 5 novembre.
Héritage H. Batatia. plan Notion (que signifie l’héritage) Ecriture en java Héritage multiple (interdit) Instanciation (partie propre et partie héritée)
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
LIFI-Java 2004 Séance du Mercredi 29 sept. Cours 4.
Introduction à la programmation objet avec java
Héritage Conception par Objet et programmation Java
8PRO107 Éléments de programmation Les tableaux. Étude de cas 1 Description du problème : Lire une liste d’entiers et l’afficher d’abord dans le même ordre.
10. Périmètres.
Transcription de la présentation:

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

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

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

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é

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();

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

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 ;

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.

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); }

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; }

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); }

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

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

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); }