Accueil🇫🇷Chercher

Encapsulation (programmation)

En programmation, l’encapsulation désigne le regroupement de données avec un ensemble de routines qui en permettent la lecture et la manipulation. Ce principe est souvent accompagné du masquage de ces données brutes[1] afin de s’assurer que l’utilisateur ne contourne pas l’interface qui lui est destinée. L’ensemble se considère alors comme une boîte noire ayant un comportement et des propriétés spécifiés.

L’encapsulation est un pilier de la programmation orientée objet, où chaque classe définit des méthodes ou des propriétés pour interagir avec les données membres, mais ce principe peut se rencontrer dans d’autres styles de programmation (par exemple la programmation modulaire).

Motivations

  • L'encapsulation permet de modifier les structures de donnĂ©es internes sans modifier l’interface de celle-ci et donc sans pĂ©naliser les utilisateurs. Cette situation arrive frĂ©quemment lorsque l’on veut amĂ©liorer l’efficacitĂ© (rapiditĂ© de traitement) d’une classe ou d’un module, il faut souvent modifier les structures de donnĂ©es en consĂ©quence.
  • L'encapsulation permet d’ajouter aisĂ©ment des règles de validation et des contraintes d’intĂ©gritĂ©, par exemple limiter le domaine des valeurs qu’une variable peut prendre (validitĂ©) ou vĂ©rifier que cette valeur n’entre pas en conflit avec les valeurs d’autres variables (intĂ©gritĂ©).
  • L'encapsulation Ă©vite l’antipattern plat de spaghetti qui ne permet pas de dĂ©terminer le qui, le quoi et le comment d’une modification de donnĂ©es. En effet, l'application systĂ©matique de l'encapsulation impose un couplage faible et empĂŞche donc le couplage fort, par espace commun ou par contenu, responsable du plat de spaghetti.
  • Finalement, l'encapsulation permet d’offrir une interface orientĂ©e services et responsabilitĂ©s, c’est-Ă -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 responsabilitĂ©s de cette classe ou module.

Implémentation

Les principes de l'encapsulation sont appliqués de manières très diverses suivant les langages. Mais on peut quand même trouver deux courants principaux.

Premièrement, 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 général dans le programme et en écriture aussi depuis l'intérieur de la classe d'objet. On trouve ensuite différents moyens pour adapter ce cadre à des classes amies ou à des catégories et des hiérarchies d'objets.

Deuxièmement, les langages tels que C++, Java ou Ruby et plus généralement tous les langages influencés par la syntaxe du C++ qui a proposé trois niveaux de visibilité :

  • public : les attributs publics sont accessibles Ă  tous ;
  • protĂ©gĂ© : les attributs protĂ©gĂ©s sont accessibles seulement Ă  la classe elle-mĂŞme et aux classes dĂ©rivĂ©es ;
  • privĂ© : les attributs privĂ©s sont accessibles seulement par la classe elle-mĂŞme.

Ce type d'encapsulation propose en fait une autre approche de l'encapsulation qui ne fait pas la distinction entre la lecture et l'écriture d'un attribut. Dans ce cadre, on peut aussi utiliser des méthodes d'accès et de modifications définies dans l'un de ces niveaux de visibilité suivant l'effet que l'on souhaite obtenir. Souvent des méthodes des deux types sont définies en plus de l'attribut qui contient réellement la donnée. Enfin, des moyens autorisent d'autres classes et fonctions libres à librement accéder à tous les attributs d'une classe, comme c'est le cas avec les classes et fonctions amies en C++.

Notes et références

  • Cet article est partiellement ou en totalitĂ© issu de l'article intitulĂ© « Encapsulation des donnĂ©es » (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, consulté le )

Voir aussi


Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.