Rappels et compléments de Java sur les « interfaces » Fabien Moutarde 1
RAPPELS
ET COMPLEMENTS
SUR LES
INTERFACES EN JAVA
Rappels et compléments de Java sur les « interfaces » Fabien Moutarde 2
LIMITES DE L’HERITAGE
SIMPLE
static public void
translaterZoomer(
Figure
[] tabF,
int dx, int dy, double facteurZoom) {
for (Figure f : tabF) {
f.translater(dx, dy);
f.zoomer(facteurZoom);
}
}
Componant
{abstract}
Label Button
Figure
{abstract}
translater(dx:integer, dy:integer)
zoomer(facteurZoom:real) {abstract}
Cercle
rayon:real
zoomer(facteurZoom:real)
Rectangle
hauteur:real
Largeur:real
zoomer(facteurZoom:real)
static public void
translaterZoomer(Label[] tabL,
int dx, int dy, double facteurZoom) {
for (Label l : tabL) {
l.setLocation(l.getX()+dx,l.getY()+dy);
Font policeIni = l.getFont();
l.setFont(policeIni.deriveFont(
(int)(
policeIni
.getSize()*
facteurZoom
));
} }
Rappels et compléments de Java sur les « interfaces » Fabien Moutarde 3
FACTORISATION PAR LES
INTERFACES
interface Visualisable {
void translater(int dx, int dy);
void zoomer(double facteurZoom);
}
class Figure implements Visualisable {
//... }
class LabelVisu implements Visualisable
extends Label {
public void translater(int dx, int dy) {
setLocation(getX()+dx,getY()+dy); }
public void zoomer(double facteurZoom) {
Font policeIni = getFont();
setFont( policeIni.deriveFont(
(int)(policeIni.getSize()*facteurZoom));
}}
Cercle
rayon:real
zoomer(facteurZoom:real)
Figure {
abstract}
translater(dx:integer, dy:integer)
Componant
{abstract}
LabelVisu
Visualisable
translater(dx:integer, dy:integer)
zoomer(facteurZoom:real)
translater(dx:integer, dy:integer)
zoomer(facteurZoom:real)
Label
Rappels et compléments de Java sur les « interfaces » Fabien Moutarde 4
FACTORISATION PAR LES
INTERFACES (2)
//...
Figure[] tF = new Figure[2];
translaterZoomer(tF);
// OK car Figure implémente Visualisable
LabelVisu[] tL = new LabelVisu[3];
translaterZoomer(tL);
// OK car LabelVisu implémente Visualisable
Visualizable[] tV = new Visualisable[3];
tV[0] = new Rectangle(...);
tV[1] = new Cercle (...);
tV[2] = new LabelVisu (...);
translaterZoomer(tV);
//...
static public void translaterZoomer(
Visualisable[] tabV, int dx, int dy,
double facteurZoom) {
for (Visualisable v : tabV) {
v.translater(dx, dy);
v.zoomer(facteurZoom);
}
}
Rappels et compléments de Java sur les « interfaces » Fabien Moutarde 5
NATURE ET INTERET
DES INTERFACES
définition abstraite d'un service,
indépendamment de la façon dont il
est implémenté ("type abstrait de
données")
concrètement, ensemble de méthodes
publiques abstraites (et de constantes
de classe)
facilite la programmation “générique”
permet un héritage multiple restreint
Rappels et compléments de Java sur les « interfaces » Fabien Moutarde 6
DEFINITIONS
D’INTERFACES
exemples :
interface Redimensionnable {
void grossir(int facteur);
void reduire(int facteur);
}
interface Coloriable {
void colorier(Couleur c);
}
interface Pile {
void empiler(Object o);
Object sommet();
void depiler();
boolean estVide();
}
Rappels et compléments de Java sur les « interfaces » Fabien Moutarde 7
UTILISATION DES
INTERFACES
utilisation : toute classe peut implémenter
une (ou plusieurs) interface(s) :
class Cercle implements
Coloriable,Redimensionnable {
//...
}
une classe qui implémente une interface doit
redéfinir toutes les méthodes de l'interface
(ou bien être abstraite) :
class Cercle implements
Coloriable,Redimensionnable {
//...
public void grossir(int facteur) {
rayon *= facteur;
}
public void reduire(int facteur){...}
public void colorier(Couleur c){...}
}
abstract class Figure implements Coloriable {
// classe abstraite ==> pas indispensable
// de redéfinir
colorier()
// ...
}
Rappels et compléments de Java sur les « interfaces » Fabien Moutarde 8
REFERENCES DE TYPE
INTERFACE
Chaque interface définit un type de
référence
une référence à interface peut désigner
toute instance de toute classe qui
implémente l'interface en question :
Redimensionnable redim;
Coloriable col;
Cercle cercle = new Cercle();
redim = cercle;
col = cercle;
// cercle, col et redim forment
// 3 vues différentes du même objet...
// ...et les méthodes applicables dépendent
// de la vue utilisée :
col.colorier(Color.red); // OK
col.grossir(2); // ERREUR
redim.grossir(2); // OK
cercle.colorier(Color.red); // OK
Rappels et compléments de Java sur les « interfaces » Fabien Moutarde 9
INTERFACES
ET HERITAGE
une interface peut dériver d'une (ou
plusieurs) autres interfaces
interface X {...}
interface Y {...}
interface Z extends X,Y{...}
si une classe Mere implémente une
interface, alors toutes ses classes filles
héritent de cette propriété :
class Mere implements Z{...}
class Fille extends Mere {...}
//...
Z z = new Fille(); // OK
X x = new Fille(); // OK
// car Fille implémente (par héritage)
// l'interface Z (et donc aussi X)
Rappels et compléments de Java sur les « interfaces » Fabien Moutarde 10
INTERFACES
“MARQUEURS"
une interface peut ne contenir aucune
méthode ni constante, et servir juste de
"marqueur" pour indiquer une propriété
des classes qui l'implémentent
exemples :
interface Cloneable pour
identifier les classes aux instances
desquelles on peut appliquer la
méthode de duplication clone()
interface Serializable pour
identifier les classes dont on peut
sauvegarder des instances sur fichier
(cf java.io)
1 / 8 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est très important pour nous!