Programmation/Programmation orientée objet/Encapsulation
Abstraction des données
[modifier | modifier le wikicode]L'abstraction des données (data abstraction) est un des concepts fondamentaux de la POO (Programmation Orientée Objets). En programmation structurée, les données qui ont un lien logique sont regroupées en structures, les enregistrements. De la même manière, les instructions qui ont un lien logique sont rassemblées dans des sous-programmes. Ainsi, les données et le code sont structurés, et on atteint un certain niveau d'abstraction puisqu'un seul identificateur regroupe les champs d'un enregistrement ou l'ensemble des instructions d'un sous-programme.
L'exécution d'un programme consiste alors à utiliser des sous-programmes pour initialiser, et/ou modifier, et/ou afficher des données. Ces sous-programmes doivent donc connaître la structure des données qu'ils utilisent. Pour cela, il faut connaître les structures des données avant de pouvoir écrire des sous-programmes qui les utilisent, et transmettre ces données à travers les interfaces des sous-programmes (paramètres). On fait donc coexister de manière autonome des éléments qui ont un lien logique. Grâce à l'encapsulation, la POO propose de relier les données et le code qui les manipule dans des entités nouvelles qui permettent d'utiliser des sous-programmes sans exposer la structure des données qu'ils manipulent. Les données sont donc cachées (information hiding en anglais) mais accessibles à travers les méthodes.
Encapsulation
[modifier | modifier le wikicode]Pour permettre l'abstraction des données, les LOO (langage orienté objets) fournissent une structure qui regroupe (ou encapsule) les données et les sous-programmes qui les utilisent. Une telle structure est appelée classe, et l'instance d'une classe (la déclaration d'une variable de type classe) est appelée objet. Les classes sont composées de données membres (que l'on peut comparer aux champs des enregistrements de la programmation structurée) appelées aussi attributs, et de fonctions membres appelées méthodes qui définissent les opérations à réaliser sur les données membres.
Les programmes qui manipulent des objets ne connaissent pas les identificateurs des données membres de ces objets. Les échanges de données entre le programme et les objets se font au moyen d'une interface clairement définie (les fonctions membres) et donc indépendante des données membres. Aussi longtemps que cette interface ne change pas, les données membres et le code des fonctions membres de l'objet peuvent changer sans nécessiter la modification du programme qui utilise l'objet. Cela permet une modularité plus grande et une indépendance vis-à-vis du choix de la représentation interne des données.