Les membres (champs et méthodes) ont une visibilité :
private ou
public.
Lorsque la visibilité est public, tout morceau de code qui a accès à l'objet
dont un membre est public peut accéder à ce membre. Dans le cas des champs, on peut lire et modifier la valeur
du champ. Presque toutes les méthodes doivent être déclarées public et presque
tous les champs doivent être déclarés private.
Lorsque que la visibilité est private, seul du code situé dans le bloc de
déclaration de classe dans lequel est déclaré le membre privé peut y accéder.
class Compteur {
private int etat;
public int getEtat() { return this.etat; }
boolean egalA1(Compteur c) {
// autorisé
return this.getEtat() == c.getEtat();
}
boolean egalA2(Compteur c) {
// l'accès à l'état de c est autorisé
// malgré que etat soit déclaré private
return this.etat == c.etat;
}
} | class Foo {
boolean comp1 (Compteur c1, Compteur c2) {
// Autorisé à partir de la classe Foo
// seulement parce que getEtat est public
return c1.getEtat() == c2.getEtat();
}
boolean comp2 (Compteur c1, Compteur c2) {
// Interdit (à la compilation)
// car etat est déclaré private
return c1.etat == c2.etat;
}
} |
Combiné avec l'analyse par invariant, la visibilité permet de s'assurer que personne ne viendra
modifier la valeur des champs autrement que par l'utilisation des méthodes publiques. Chaque
méthode publique doit alors faire l'objet d'une étude particulière.