Dark Mode

Aller au contenu

Encapsulation (programmation)

Un article de Wikipedia, l'encyclopedie libre.

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.
  1. | (en) Wm. Paul Rogers, << Encapsulation is not information hiding >>, JavaWorld, (lire en ligne, consulte le )

Sur les autres projets Wikimedia :


v * m
Bibliotheque logicielle
Vocabulaire
Fonctions
Objet
Evenementiel Inversion de controle
Code source
Structures de donnees
Declarations
Structures de controle
Fonctions usuelles
Outil de developpement
Folklore
v * m
Gestion de la qualite logicielle
Indicateurs de qualite (ISO/CEI 9126)
Comprehension et controle du code source
Tests
Metriques
Remaniements
Principes de programmation
SOLID
Mauvaises pratiques
Antipatterns
Code smells
Voir aussi : Genie logiciel, Software craftsmanship, Degradation logicielle