Java, les visibilités et disgressions sur le sujet
Par kadreg, jeudi 4 septembre 2008 à 22:18 :: Programmation :: #98 :: rss
De nombreux langages objets introduisent la notion de visibilité des éléments (attributs et opérations) d'une classe. Ceci permettant de gérer l'encapsulation au niveau de la déclaration de la classe.
Java utilise les mêmes mots clefs que le C++. Mais une erreur courante est de les confondre, ils n'ont pas tout a fait la même sémantique, et on peu avoir des surprises lorsque l'on vient de cet autre langage.
public est très simple, l'élément est accessible depuis tout élément externe comme des autres éléments de la classe courante. C'est la visibilité de la publication, lorsque l'on rend un élément utilisable à tous
private est simple aussi, c'est la visibilité minimale. L'élément ainsi déclaré n'est visible que par les éléments de la classe. C'est la visibilité que l'on donnera aux éléments internes, aux données, aux opérations purement techniques. Tout ce qui ne regarde pas les utilisateurs de la classe.
Personnellement, je conseille de mettre en privé toutes les déclarations d'attributs de la classe. En effet, cela permet de centraliser tous les accès à un attribut dans l'accesseur (qui sera public ou nom suivant les besoins). C'est ce que Meyer appelle l'accès uniforme à une ressource. Quelque soit d'ou on y accède, il y a un point de passage obligé permettant de faire des vérifications, de surveiller ce qui se passe, de logger. En un mot, que personne ne tripote la donnée en douce.
protected est la troisième visibilité. Ca rend l'élément visible pour les sous classes, ce qui est pratique pour factoriser du code dans une classe mère, mais pour que seules les classes filles aient le droit de l'utiliser. En java, contrairement à C++, ça rend aussi l'élément visible par les classes du même package que la classe courante.
L'intérêt est simple. Il y a une double granularité en java pour les visibilités. La classe, que l'on peut assimiler a un élément. Et le package, regroupant un ensemble d'éléments dans un but cohérent. Par exemple le package java.io va contenir un ensemble de classes pour gérer les entrées sorties. C'est un ensemble cohérent, fait pour fonctionner ensemble, donc les éléments du même package ont bien le droit à leur visibilité spéciale, permettant de faire fonctionner plusieurs classes entre elles, mais sans pour autant ouvrir la quincaillerie au monde extérieur.
Enfin la dernière visibilité est package. C'est celle que l'on a lorsque l'on déclare un élément sans mot clef sur la visibilité. Cela rend l'élément visible seulement pour les éléments du même package. Comme précédemment, cela permet de publier des chose au niveau du package, lorsque celui-ci forme un ensemble cohérent.
Donc, il y a 4 visibilités en java. De la plus restrictive à la plus ouverte : private, package, protected et public.
A noter un cas complementaire. Dans les plugins eclipse, on a une autre visibilité gérée au niveau de plugin.xml. Pour chaque package du plugin, on peut exprimer le fait qu'il soit visible de l'extérieur du plugin ou pas. traditionnellement, on rend public le package des interfaces, et les packages d'implémentation, on les garde cachés. Cela permet d'éviter que le voisin tripote le fonctionnement interne du plugin.
Commentaires
Aucun commentaire pour le moment.
Ajouter un commentaire