Chap6 Classes Abstraite Interfaces
Chap6 Classes Abstraite Interfaces
Chap6 Classes Abstraite Interfaces
Java 1
Classes: DSI 21
Héritage et abstraction
Classes abstraites
Attributs : Attributs :
Attributs : double x,y; //1 des sommets
double x,y; //centre du cercle double x,y; //coin inférieur gauche double x1,y1; // v1
double r; // rayon double largeur, hauteur;
Méthodes : double x2,y2; // v2
Méthodes : Méthodes :
deplacer(double dx, double dy) deplacer(double dx, double dy)
double surface() deplacer(double dx, double dy)
double surface() double surface()
double périmètre()
double périmètre(); double périmètre();
Factoriser le code ?
Samia BA LEBIBE - DECEMEBRE 2020
Classes abstraites
4
p u b l i c class Forme {
protected double x , y ;
Exemple introductif
largeur
p u b l i c Forme(double x , double y ) { v2
this.x = x; r
hauteur
this.y = y; x,y
}
x,y x,y v1
p u b l i c void deplacer(double d x ,
double dy) {
x += d x ; y += d y ; Forme
} double x,y; //point deréférence
} Forme (double x,y)
deplacer(double dx,dy)
p u b l i c class Cercle extends Forme {
protected double r ;
p u b l i c double p e r i m e t r e To t a l ( ) {
double perimTotal = 0 . 0 ; Définir uneméthode
f o r ( i n t i = 0 ; i < nbFormes++; i + + ) perimetre dans Forme ?
perimTotal += t a b F o r m e s [ i ] . p e r i m e t r e ( ) ;
r e t u r n perimTotal; p u b l i c double p e r i m e t r e ( ) {
erreur de
} r e t u r n 0 . 0 ; / / ou - 1 . ??
compilation BOF
}
}
p u b l i c void deplacer(double d x ,
on spécifie qu'un objet
double dy) {
de type Forme aura une
x += d x ; y += d y ;
méthode périmètre et
}
une méthode surface
Méthodes abstraites public abstract double perimetre() ;
par contre on ne sait pas
public abstract double sur f a c e ( ) ; comment cela sera
implémenté
}
méthodes sans corps :
Utilité : ; au lieu de { … }
définir des concepts incomplets qui devront être implémentés dans les sous classes
factoriser le code
les opérations abstraites sont particulièrement utiles pour mettre en œuvre le
polymorphisme.
l'utilisation du nom d'une classe abstraite comme type pour une (des) référence(s) est
toujours possible (et souvent souhaitable !!!)
Samia BA LEBIBE - DECEMEBRE 2020
Classes abstraites
7
classe abstraite : classe non instanciable, c'est à dire qu'elle n'admet pas
d'instances directes.
Impossible de faire new ClasseAbstraite(…);
mais une classe abstraite peut néanmoins avoir un ou des constructeurs
Une classe pour laquelle au moins une opération abstraite est déclarée est une classe
abstraite (l'inverse n'est pas vrai).
... ...
...
} la classe contient une méthode } la classe ne contient pas de
abstraite => elle doit être méthode abstraite => elle peut
déclaréeSamia
abstraite
BA LEBIBE - DECEMEBRE 2020
être déclarée abstraite
Classes abstraites
8
Une classe abstraite est une description d'objets destinée à être héritée par des classes plus
spécialisées.
Pour être utile, une classe abstraite doit admettre des classes descendantes concrètes.
Toute classe concrète sous-classe d'une classe abstraite doit “concrétiser” toutes les
opérations abstraites de cette dernière.
elle doit implémenter toutes les méthodes abstraites
Une classe abstraite permet de regrouper certaines caractéristiques communes à ses sous-
classes et définit un comportement minimal commun.
La factorisation optimale des propriétés communes à plusieurs classes par généralisation
nécessite souvent l'utilisation de classes abstraites.
classe concrète
classe abstraite
(perimetre() est
Rectangle ... FormeCirculaire héritée et non
concrétisée)
l a r g e u r : double rayon: double
hauteur : double utile que si spécialisée
perimetre() double
Disque Couronne
opération concrétisée rayonInterne : double
perimetre() double
Samia BA LEBIBE - DECEMEBRE 2020
perimetre() double
Classes abstraites
10 Exemple introductif
p u b l i c class Forme
abstract { Forme {
class
protected double x , y ;
public class ListeDeFormes {
p u b l i c Forme(double x , double y ) {
public static final int NB_MAX = 30;
this.x = x;
private Forme[] tabFormes = new Forme[NB_MAX];
this.y = y;
private int nbFormes = 0;
}
public void ajouter(Forme f) { if
p u b l i c void deplacer(double d x ,
(nbFormes < NB_MAX) {
double dy) {
tabFormes[nbFormes] =f;
x += d x ; y += d y ;
nbFormes++; }
}
}
} public abstract double perimetre();
public void toutDeplacer(double dx,double dy) {
public abstract double surface();
for (int i=0; i < NbFormes; i++)
}
tabFormes[i].deplacer(dx,dy);
}
Le polymorphisme peut être pleinement
public double perimetreTotal() { exploité. Le compilateur sait que
double perimTotal = 0.0; chaque objet Forme peut calculer son
for (int i=0; i < nbFormes++; i++) périmètre
perimTotal += tabFormes[i].perimetre();
return perimTotal;
}
}
Samia BA LEBIBE - DECEMEBRE 2020
Classes abstraites
11
public abstract class Magnitude {
Héritage et abstraction
Interfaces
class Dog extends Animal { class Bird extends Animal { class Cat extends Animal {
... ... ...
void talk() { void t a l k ( ) { void talk() {
System.out.println("Woof!"); System.out.println("Tweet"); System.out.println("Meow");
} } }
} } }
Se passer du
Samia BA LEBIBE - DECEMEBREpolymorphisme
2020 ?
Interfaces
15 Exemple introductif
Les interfaces permettent plus de polymorphisme car avec les interfaces il n’est
pas nécessaire de tout faire rentrer dans une seule famille (hiérarchie) de classes
p u b l i c i n t e r f a c e Dessinable { Possibilité
d'im plém en-
Une interface non publique p u b l i c void dessiner(Graphics g ) ; tation par
n'est accessible que dans void effacer(Graphics g ) ; défaut avec
}
son package
Dessinable.java
Une interface publique
doit être définie dans un
fichier . j a v a de même
nom
«interface» interface
Dessinable
opérations abstraites
dessiner(g : Graphics)
Samia BA LEBIBE - DECEMEBRE 2020 effacer(g: Graphics)
Interfaces
17
Déclaration d’une interface
Possibilité de définir des attributs à condition qu’il s’agisse d’attributs de type
primitif
Ces attributs sont implicitement déclarés comme static final
import java.awt.Graphics;
public interface Dessinable {
public static final int MAX_WIDTH = 1024;
int MAX_HEIGHT = 768;
public void dessiner(Graphics g);
void effacer(Graphics g);
}
Dessinable.java
p u b l i c RectangleDessinable(double x , double y,
<< interface>>
double l , double h , Color c ) { Dessinable
supe r ( x, y , l , h ) ; dessiner(Graphics g) Rectangle
this.c = c; effacer(Graphics g) double largeur,hauteur;
} Rectangle(doublex,y,l,h)
public void dessiner(Graphics g ) { double surface()
g.drawRect((int) x , ( i n t ) y, ( i n t ) largeur, ( i n t ) hauteur); double périmètre();
}
public void effacer(Graphics g ) {
g . c l e a r R e c t ( ( i n t ) x , ( i n t ) y, ( i n t ) l a r g e u r, ( i n t ) hauteur);
} RectangleDessinable
Color c
public void enregistrer(File f ) { RectangleDessinable(double x,y,l,h ,
<< interface>>
... Color c)
} Enregistrable dessiner(Graphics g)
Samia BA LEBIBE - DECEMEBRE 2020 enregistrer(File f) effacer(Graphics g)
} enregistrer(File f )
Interfaces
21 "réalisation" d’une interface
pour éviter des redéfinitions de méthodes penser à mettre
des directives @Override lors de l’implémentation des
méthodes d'une interface Forme
double x,y;//centre du cercle
Forme (double x, y)
class RectangleDessinable extends Rectangle
double surface()
implements Dessinable , Enregistrable {
p r i v a t e Color c ; double périmètre()
deplacer(double
p u b l i c RectangleDessinable(double x , double y, dx,dy)
double l , double h , Color c ) {
<< interface>>
supe r ( x, y , l , h ) ; Dessinable
this.c = c; dessiner(Graphics g) Rectangle
} effacer(Graphics g) double largeur,hauteur;
@Override Rectangle(double x,y,l,h)
public void dessiner(Graphics g ) { double surface()
g.drawRect((int) x , ( i n t ) y, ( i n t ) largeur, ( i n t ) hauteur);
double perimetre();
}
@Override
public void effacer(Graphics g ) {
g . c l e a r R e c t ( ( i n t ) x , ( i n t ) y, ( i n t ) l a r g e u r, ( i n t ) hauteur);
RectangleDessinable
}
Color c
@Override RectangleDessinable(double x,y,l,h ,
<< interface>>
public void enregistrer(File f ) { Color c)
Enregistrable dessiner(Graphics g)
...
} enregistrer(File f) effacer(Graphics g)
enregistrer(File f)
} Samia
Samia BA LEBIBE - DECEMEBRE 2020 BA Déc
Interfaces
22
interêt