Discussion:Encapsulation (programmation)
voici mes commentaires au sujet de l'encapsulation en informatique, la definition que vous donnez ne me convient pas du tout !
voici un article de référence :
http://www.tonymarston.net/php-mysql/good-bad-oop.html
- Encapsulation is not information hiding by Wm. Paul Rogers of Java World
- Abstraction, Encapsulation, and Information Hiding by Edward V. Berard of The Object Agency
l'encapsulation en informatique, c'est
- rassembler dans une meme structure (entité, classe, c'est selon) les traitements (méthodes) et les données (attributs).
l'encapsulation, ce n'est en aucun cas :
- assurer la protection des données : données privée, publique ...
- cacher l'implémentation : acceder aux données par le biais de méthodes, plutot que directement aux attributs.
la vision orientée C++ des concepts objets, du vocabulaire C++ a tendance parfois à biaiser les conversions. La richesse du langage C++ qui est aussi sa compléxité a pour effet de reléguer certains langages en seconde zone, je pense en particulier a php et python.
Marc.
- Je suis d'accord sur les premières intentions de l'encapsulation (rassembler dans une même structure). Mais comme cela va de pair avec la réutilisabilité d'une classe, il est important de distinguer les comportements interne et externe et, pour arriver à cela, la dissimulation des données membres et de l'implémentation est la technique la plus souvent employée. JonathanIlias 10 nov 2004 à 14:45 (CET)
Je suis d'accord pour dire que le lien entre encapsulation et dissimulation des données est très fort, mais ce n'est pas la même chose! Par exemple Smalltalk permet l'encapsulation mais pas la dissimulation des informations et il est consideré comme le premier language de POO. Je suis d'accord avec Marc, on devrait appeler un chat un chat et pas tout mélanger sous prétexte que dans une famille de language (C++/Java/...) ça va ensemble ...
Bien sur le sujet est débattable, mais la précision et la clareté devraient être le but d'une encyclopédie, non?
C'est pas dur de faire qq recherches pour voir que beaucoup de gens font la distinction :
- Abstraction, Encapsulation, and Information Hiding by Edward V. Berard of The Object Agency
- Encapsulation is not Information Hiding
- data hiding, encapsulation
- Encapsulation is not information hiding by Wm. Paul Rogers of Java World
- ...
En plus, je me documente sur ce sujet car je voulait écrire quelquechose dessus, et j'ai relevé environ 7 niveaux de contrôle d'accès:
- objet: strict private (Delphi)
- class: private (C++, Java, ...)
- herité: classe et sous-classes uniquement (protected en C++),
- unité: package, unit, namespace (implicite en Java)
- groupe associé: herité+unité (protected en Java)
- libre: public (C++, Java, ...)
- meta-accès: RTTI (published en Delphi, implicite en Smalltalk)
Et ca c'est qq heures de recherche, j'ai pas encore étudié assez de language pour avoir un panorama assez complet ... Quand j'aurai finit, je modifierai peut etre aussi l'article de wikipedia, car il est est très léger ...
Les articles en anglais sont plus informatifs ...
Loïc
L'encapsulation n'est pas un concept ni nouveau ni limité aux données; elle concerne le fait de regrouper et de protéger (voire cacher certains détails du fonctionnement interne), selon le même principe que celui de la capsule regroupant plusieurs médicaments (par exemple, une capsule Contact-C), d'une capsule spatiale ou d'une capsule temporelle (récipient contenant des objets qu'on enterre pour les retrouver dans plusieurs années).
Il existe plusieurs types d'encapsulation:
- encapsulation d'instructions à l'intérieur d'une routine (cacher les détails de traitement);
- encapsulation de routines (et de données) à l'intérieur d'un module;
- encapsulation de routines et de données à l'intérieur d'un objet.
Les objets ne sont que la plus récente application de ce principe. --ProgMan (discuter) 12 décembre 2016 à 06:00 (CET)
Généralisation du concept
modifierAutres exemples d'application du concept dans d'autres domaines:
- l'encapsulation d'un protocole dans un autre protocole sur la même couche du modèle OSI (des réseaux informatiques);
- l'encapsulation de circuits à l'intérieur d'un boîtier en électronique (analogique ou numérique).
Aucun exemple ni référence pour soutenir l'affirmation «l'instance d'une classe a un accès complet à l'état d'une autre instance de la même classe»
modifierLe principe de l'encapsulation étant de «protéger» certains éléments d'un objet, il est douteux d'affirmer que « dans ces langages, l'instance d'une classe a un accès complet à l'état d'une autre instance de la même classe ». L'article correspondant en anglais ne fait pas une telle affirmation et je ne pense pas que C++ et Java permettent par défaut (c'est-à-dire sans liens «amies» explicites) un tel accès interne entre les objets d'une même classe (instances de classe).
Pour réintroduire cette affirmation, il faut l'accompagner d'une référence, voire d'un exemple. --ProgMan (discuter) 25 mai 2021 à 16:29 (CEST)