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