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.
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);
}
// 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;
}
}
class lampe implements appareilElectrique {
boolean allumee = false;
public boolean estEnclenche() {
return allumee;
}
public void alimente(boolean alim) {
allumee = alim;
}
}
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;
}
}
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"));
}
}
la radio du salon est eteinte
on appuie sur l'interrupteur de la rallonge 1
la radio du salon est maintenant allumee