Encapsulation (programmation)
Pour les articles homonymes, voir Encapsulation.
En programmation, l'encapsulation designe le regroupement de donnees avec un ensemble de routines qui en permettent la lecture et la manipulation. Ce principe est souvent accompagne du masquage de ces donnees brutes[1] afin de s'assurer que l'utilisateur ne contourne pas l'interface qui lui est destinee. L'ensemble se considere alors comme une boite noire ayant un comportement et des proprietes specifies.
L'encapsulation est l'un des quatre piliers de la programmation orientee objet (avec l'abstraction, l'heritage et le polymorphisme), ou chaque classe definit des methodes ou des proprietes pour interagir avec les donnees membres, mais ce principe peut se rencontrer dans d'autres styles de programmation (par exemple la programmation modulaire).
Motivations
[modifier | modifier le code]- L'encapsulation permet de modifier les structures de donnees internes sans modifier l'interface de celle-ci et donc sans penaliser les utilisateurs. Cette situation arrive frequemment lorsque l'on veut ameliorer l'efficacite (rapidite de traitement) d'une classe ou d'un module, il faut souvent modifier les structures de donnees en consequence.
- L'encapsulation permet d'ajouter aisement des regles de validation et des contraintes d'integrite, par exemple limiter le domaine des valeurs qu'une variable peut prendre (validite) ou verifier que cette valeur n'entre pas en conflit avec les valeurs d'autres variables (integrite).
- L'encapsulation evite l'antipattern plat de spaghetti qui ne permet pas de determiner le qui, le quoi et le comment d'une modification de donnees. En effet, l'application systematique de l'encapsulation impose un couplage faible et empeche donc le couplage fort, par espace commun ou par contenu, responsable du plat de spaghetti.
- Finalement, l'encapsulation permet d'offrir une interface orientee services et responsabilites, c'est-a-dire, d'offrir aux utilisateurs (programmeurs, abstractionnistes et architectes) de la classe ou du module une interface indiquant clairement quels services sont offerts et quelles sont les responsabilites de cette classe ou module.
Implementation
[modifier | modifier le code]Les principes de l'encapsulation sont appliques de manieres tres diverses suivant les langages. Mais on peut quand meme trouver deux courants principaux.
Premierement, une application relativement stricte des principes dans les langages objet purs (pour autant que ce terme ait un sens) comme dans SmallTalk ou Eiffel. Dans ce cadre les attributs ne sont souvent disponibles qu'en lecture en general dans le programme et en ecriture aussi depuis l'interieur de la classe d'objet. On trouve ensuite differents moyens pour adapter ce cadre a des classes amies ou a des categories et des hierarchies d'objets.
Deuxiemement, les langages tels que C++, Java ou Ruby et plus generalement tous les langages influences par la syntaxe du C++ qui a propose trois niveaux de visibilite :
- public : les attributs publics sont accessibles a tous ;
- protege : les attributs proteges sont accessibles seulement a la classe elle-meme et aux classes derivees ;
- prive : les attributs prives sont accessibles seulement par la classe elle-meme.
Ce type d'encapsulation propose en fait une autre approche de l'encapsulation qui ne fait pas la distinction entre la lecture et l'ecriture d'un attribut. Dans ce cadre, on peut aussi utiliser des methodes d'acces et de modifications definies dans l'un de ces niveaux de visibilite suivant l'effet que l'on souhaite obtenir. Souvent des methodes des deux types sont definies en plus de l'attribut qui contient reellement la donnee. Enfin, des moyens autorisent d'autres classes et fonctions libres a librement acceder a tous les attributs d'une classe, comme c'est le cas avec les classes et fonctions amies en C++.
Notes et references
[modifier | modifier le code]- Cet article est partiellement ou en totalite issu de l'article intitule << Encapsulation des donnees >> (voir la liste des auteurs).
- Pressman R. S., Software Engineering: A Practitioner's Approach, Third Edition. McGraw-Hill. Chapitre 10, 1992.
- | (en) Wm. Paul Rogers, << Encapsulation is not information hiding >>, JavaWorld, (lire en ligne, consulte le )
Voir aussi
[modifier | modifier le code]Sur les autres projets Wikimedia :
- encapsulation, sur le Wiktionnaire
- Encapsulation (programmation), sur Wikibooks
- Le principe de masquage de l'information.
- La metrique de cohesion.
- La metrique de couplage.
- La metrique d'independance fonctionnelle.
Elements de programmation informatique |
|||||||||
|---|---|---|---|---|---|---|---|---|---|
| Bibliotheque logicielle | |||||||||
| Vocabulaire |
|
||||||||
| Code source |
|
||||||||
| Outil de developpement | |||||||||
| Folklore | |||||||||
Categories :
| |||||||||
Gestion de la qualite logicielle |
|||||
|---|---|---|---|---|---|
| Indicateurs de qualite (ISO/CEI 9126) |
|
||||
| Comprehension et controle du code source |
|
||||
| Remaniements | |||||
| Principes de programmation |
|
||||
| Mauvaises pratiques |
|
||||
| Voir aussi : Genie logiciel, Software craftsmanship, Degradation logicielle | |||||