6. Interfaces
On peut imaginer une interface appareilElectrique
qui définit les méthodes estEnclenche() et
alimente(boolean). Si une classe implémente l'interface
appareilElectrique, on sait donc qu'elle possède
au moins ces deux méthodes, qu'il s'agisse d'une radio,
d'une lampe ou d'un autre appareil. Lorsque l'on désire indiquer
à un appareil qu'il est alimenté, on exécute app.alimente(true),
et pour lui indiquer qu'il a été débranché, on exécute
app.alimente(false).
Nous allons donc créer deux types d'appareils électriques, les radios et
les lampes. Ces deux types implémentent l'interface appareilElectrique.
Nous allons également créer une classe rallongeElectrique, qui est aussi
un appareil électrique. La méthode la plus intéressante de cette classe est la méthode
branche(appareilElectrique). Celle-ci enregistre l'objet fourni en paramètre
comme étant l'objet alimenté à travers la rallonge. Cette rallonge possède un interrupteur,
que l'on peut activer ou désactiver en appelant ses méthodes enclenche(),
respectivement declenche(). Lorsque l'on change l'état de l'interrupteur,
on indiquera à l'objet qui en dépend qu'il est ou qu'il n'est plus alimenté.
La page "déclaration d'interface" peut également
intéresser le lecteur.
Interface - appareilElectrique
public interface appareilElectrique {
/** teste si l'appareil est enclenche
*/
public boolean estEnclenche();
/** on appelle cette methode lorsque l'on
* branche l'appareil dans une source de
* courant active, avec true, ou false
* si la source est inactive
*/
public void alimente(boolean alim);
}
Implémentation - radio
// c'est une radio rudimentaire, qui se deregle quand on l'eteint !
class radio implements appareilElectrique {
final static int freqMiseEnRoute = 1007; // 100.7 MHz
int freq;
boolean allumee = false;
public boolean estEnclenche() {
return allumee;
}
public void alimente(boolean a) {
allumee = a;
if (allumee)
freq = freqMiseEnRoute;
}
/** on ne peut changer de frequence que si la
* radio est en marche
* retourne true si le changement a ete effectue
*/
public boolean changeFreq(int freq) {
if (!allumee)
this.freq = freq;
return allumee;
}
}
Implémentation - lampe
class lampe implements appareilElectrique {
boolean allumee = false;
public boolean estEnclenche() {
return allumee;
}
public void alimente(boolean alim) {
allumee = alim;
}
}
Implémentation - rallongeElectrique
class rallongeElectrique implements appareilElectrique {
appareilElectrique appareilBranche = null;
boolean conduit = false; // indique si l'interrupteur est ferme (conduit=true)
boolean estAlimente = false;
public boolean estEnclenche() {
return conduit;
}
public void alimente(boolean alim) {
if (alim) { // on branche la rallonge dans une prise
if (!estAlimente && conduit)
on();
} else // on debranche
if (estAlimente && conduit)
off();
estAlimente = alim;
}
/* gestion de l'interrupteur
*/
public void enclenche() {
if (!conduit && estAlimente)
on();
conduit = true;
}
public void declenche() {
if (conduit && estAlimente)
off();
conduit = false;
}
/* gestion de l'appareil branche
*/
private void on() {
if (appareilBranche != null)
appareilBranche.alimente(true);
}
private void off() {
if (appareilBranche != null)
appareilBranche.alimente(false);
}
// branche un nouvel appareil a la rallonge
public boolean branche(appareilElectrique app) {
if (appareilBranche != null) // il y a deja un appareil branche !
return false;
appareilBranche = app;
return true;
}
}
Exemple d'utilisation - testElectrique
class testElectrique {
public static void main(String args[]) {
rallongeElectrique rallonge1, rallonge2;
rallonge1 = new rallongeElectrique();
rallonge2 = new rallongeElectrique();
radio radioSalon = new radio();
lampe lampeCuisine = new lampe();
// on imagine que l'on branche les rallonges dans 2 prises
rallonge1.alimente(true);
rallonge2.alimente(true);
// on branche des appareils dans ces 2 rallonges
rallonge1.branche(radioSalon);
rallonge2.branche(lampeCuisine);
System.out.println("la radio du salon est "+
(radioSalon.estEnclenche() ? "allumee" : "eteinte"));
System.out.println("on appuie sur l'interrupteur de la rallonge 1");
rallonge1.enclenche();
System.out.println("la radio du salon est maintenant "+
(radioSalon.estEnclenche() ? "allumee" : "eteinte"));
}
}
Exécution
la radio du salon est eteinte
on appuie sur l'interrupteur de la rallonge 1
la radio du salon est maintenant allumee