Abstraction VS informations masquant VS encapsulation

167

Pouvez-vous me dire quelle est la différence entre l' abstraction et l' information cachée dans le développement logiciel?

Je suis confus. L'abstraction cache l'implémentation des détails et les informations cachent des abstractions entières de quelque chose.

Mise à jour: j'ai trouvé une bonne réponse pour ces trois concepts. Voir la réponse séparée ci-dessous pour plusieurs citations tirées de .

popopome
la source
"L'encapsulation est alors la technique pour empaqueter l'information de manière à cacher ce qui doit être caché, et rendre visible ce qui est censé être visible." ; en se rappelant que l'encapsulation est obtenue grâce à la dissimulation d'informations.
wulfgarpro
citation kink cassé
Rishi Dua

Réponses:

152

Allez à la source! Grady Booch dit (dans Object Oriented Analysis and Design, page 49, deuxième édition):

L'abstraction et l'encapsulation sont des concepts complémentaires: l'abstraction se concentre sur le comportement observable d'un objet ... l'encapsulation se concentre sur l'implémentation qui donne lieu à ce comportement ... l'encapsulation est le plus souvent réalisée par le masquage d'informations, qui est le processus de masquage de tous les secrets de l'objet qui ne contribuent pas à ses caractéristiques essentielles.

En d'autres termes: abstraction = l'objet extérieurement; encapsulation (obtenue grâce au masquage d'informations) = l'objet en interne,

Exemple: dans .NET Framework, la System.Text.StringBuilderclasse fournit une abstraction sur un tampon de chaîne. Cette abstraction de tampon vous permet de travailler avec le tampon sans tenir compte de son implémentation. Ainsi, vous pouvez ajouter des chaînes au tampon sans tenir compte de la façon dont le StringBuildergarde en interne des choses telles que le pointeur vers le tampon et la gestion de la mémoire lorsque le tampon est plein (ce qu'il fait avec l'encapsulation via le masquage d'informations).

rp

rp.
la source
5
diriez-vous que, de la même manière que l'abstraction et l'encapsulation sont complémentaires, l'encapsulation et le masquage d'informations sont également complémentaires? Bien sûr, l'encapsulation est obtenue grâce au masquage d'informations, mais ... l'encapsulation n'est-elle pas le mécanisme par lequel le masquage d'informations est réalisé?
wulfgarpro
Un autre exemple du monde réel pour la définition de Booch est disponible ici
lifebalance
Pouvez-vous me dire s'il serait correct de dire que l'abstraction est mieux comprise à travers la perspective du code client tandis que l'encapsulation est mieux comprise à travers la perspective du code de service (c'est-à-dire la classe encapsulée elle-même)?
user1338998
L'exemple du monde réel pour la définition ci-dessus est expliqué ici: stackoverflow.com/a/635755/3181500
user3181500
84

Le PO a mis à jour sa question avec plusieurs citations qu'il avait trouvées, notamment dans un article d'Edward V. Berard intitulé, «Abstraction, Encapsulation, and Information Hiding» . Je publie à nouveau une version légèrement élargie et reformatée de la mise à jour du PO, car elle devrait être une réponse à part entière.

(Toutes les citations sont tirées de l'article mentionné ci-dessus.)

Abstraction:

"Un point de confusion concernant l'abstraction est son utilisation à la fois comme processus et comme entité. L'abstraction, en tant que processus, désigne l'extraction des détails essentiels sur un élément ou un groupe d'éléments, tout en ignorant les détails non essentiels. L'abstraction, en tant que entité, désigne un modèle, une vue ou une autre représentation ciblée d'un élément réel. "

Masquage d'informations:

"Son interface ou sa définition a été choisie pour révéler le moins possible son fonctionnement interne." - [Parnas, 1972b]

"L'abstraction peut être […] utilisée comme technique pour identifier les informations à cacher."

"La confusion peut survenir lorsque les gens ne parviennent pas à faire la distinction entre la dissimulation d'informations et une technique (par exemple, l'abstraction) qui est utilisée pour aider à identifier les informations à cacher."

Encapsulation:

"Cela […] fait référence à la construction d'une capsule, dans le cas d'une barrière conceptuelle, autour d'une collection d'objets." - [Wirfs-Brock et al, 1990]

"En tant que processus, l'encapsulation signifie le fait d'enfermer un ou plusieurs articles dans un […] conteneur. L'encapsulation, en tant qu'entité, fait référence à un emballage ou à une enveloppe qui contient (contient, renferme) un ou plusieurs articles."

«Si l'encapsulation était« la même chose que la dissimulation d'informations », alors on pourrait faire valoir que« tout ce qui était encapsulé était également caché ». Ce n'est évidemment pas vrai. "

Conclusion:

"L'abstraction, le masquage d'informations et l'encapsulation sont des concepts très différents, mais étroitement liés. On pourrait soutenir que l'abstraction est une technique qui nous aide à identifier les informations spécifiques qui doivent être visibles et celles qui doivent être masquées. L'encapsulation est alors la technique. pour emballer les informations de manière à cacher ce qui doit être caché et à rendre visible ce qui est censé être visible. "

stakx
la source
grande explication pratiquement. ce serait formidable de fournir des exemples concrets en java. il me semble que le setter / getter en java cache l'implémentation, donc la réalisation Information Hiding(ou le masquage de l'implémentation), alors qu'un générique classréalise l'encapsulation et l'abstraction se fait via l' privateaccès
abarik
57

Abstraction cache les détails de l'implémentation en fournissant une couche sur la fonctionnalité de base.

Information Hidingcache les données affectées par cette implémentation. L'utilisation de privateet publicrelève de cela. Par exemple, masquer les variables des classes.

Encapsulationc'est juste mettre toutes les données et fonctions similaires dans un groupe, par exemple Classdans la programmation; Packetdans le réseautage.

Grâce à l'utilisation de classes, nous implémentons les trois concepts - Abstraction, Information HidingetEncapsulation

Shashwat
la source
33

Veuillez ne pas compliquer des concepts simples.

Encapsulation : le regroupement des données et des méthodes en une seule unité est l'encapsulation (par exemple, la classe)

Abstraction : C'est un acte de ne représenter que les choses essentielles sans inclure les détails de fond. (par exemple, interface)

POUR DES EXEMPLES ET PLUS D'INFORMATIONS GOTO:

http://thecodekey.com/C_VB_Codes/Encapsulation.aspx

http://thecodekey.com/C_VB_Codes/Abstraction.aspx

Définitions approuvées ici

PS: je me souviens aussi de la définition d'un livre nommé C ++ par Sumita Arora que nous avons lu en 11e classe;)

Rashy
la source
6

Le sens de l'abstraction donné par l'Oxford English Dictionary (OED) le plus proche du sens voulu ici est «L'acte de séparation dans la pensée». Une meilleure définition pourrait être «Représenter les caractéristiques essentielles de quelque chose sans inclure l'arrière-plan ou les détails inutiles».

Le masquage d'informations est le principe selon lequel les utilisateurs d'un composant logiciel (comme une classe) n'ont besoin de connaître que les détails essentiels sur la façon d'initialiser et d'accéder au composant, et n'ont pas besoin de connaître les détails de l'implémentation.

Edit : Il me semble que l'abstraction est le processus consistant à décider quelles parties de l'implémentation doivent être cachées .

Donc, ce n'est pas l'abstraction VERSUS se cachant des informations. C'est une information qui cache l'abstraction de VIA.

brouillage
la source
4

Abstraction

L'abstraction est un acte de représentation des détails essentiels sans inclure les détails d'arrière-plan. Une classe abstraite n'a que des signatures de méthode et la classe d'implémentation peut avoir sa propre implémentation, de cette manière les détails complexes seront cachés à l'utilisateur. L'abstraction se concentre sur la vue extérieure. En d'autres termes, l'abstraction est la séparation des interfaces de l'implémentation réelle.

Encapsulation

L'encapsulation explique la liaison des données membres et des méthodes en une seule unité. La dissimulation d'informations est le principal objectif de l'encapsulation. L'encapsulation est réalisée en utilisant des spécificateurs d'accès tels que private, public, protected. Les variables de membre de classe sont rendues privées afin qu'elles ne puissent pas être accessibles directement au monde extérieur. L'encapsulation se concentre sur la vue intérieure. En d'autres termes, l'encapsulation est une technique utilisée pour protéger les informations d'un objet de l'autre objet.

Harleen
la source
3

L'abstraction cache les détails de l'implémentation comme vous le dites.

Vous abstenez quelque chose à un point suffisamment élevé pour que vous n'ayez qu'à faire quelque chose de très simple pour effectuer une action.

Le masquage d'informations cache les détails de mise en œuvre. La programmation est difficile. Vous pouvez avoir beaucoup de choses à gérer et à gérer. Il peut y avoir des variables que vous souhaitez / devez suivre de très près. Le masquage des informations garantit que personne ne casse accidentellement quelque chose en utilisant une variable ou une méthode que vous avez exposée publiquement.

Ces 2 concepts sont très étroitement liés dans la programmation orientée objet.

Dan Herbert
la source
3

Abstraction - C'est le processus d'identification des caractéristiques essentielles d'un objet sans inclure les détails non pertinents et fastidieux.

Encapsulation - Il s'agit du processus de regroupement des données et des fonctions manipulant ces données dans une seule unité.

L'abstraction et l'encapsulation sont des concepts liés mais complémentaires.

  1. L'abstraction est le processus. L'encapsulation est le mécanisme par lequel l'abstraction est implémentée.

  2. L'abstraction se concentre sur le comportement observable d'un objet. L'encapsulation se concentre sur l'implémentation qui donne lieu à ce comportement.

Masquage d'informations - Il s'agit du processus de masquage des détails d'implémentation d'un objet. C'est le résultat de l'encapsulation.

Aatish Agarwal
la source
2

Encapsulation: la liaison des données membres et des fonctions membres ensemble est appelée encapsulation. l'encapsulation se fait par classe. abstraction: masquer les détails de l'implémentation de l'utilisation du formulaire ou de la vue est appelé abstraction. ex: int x; nous ne savons pas comment int fonctionnera en interne. mais nous savons que int fonctionnera. c'est de l'abstraction.

Siva Prasad
la source
2

Abstraction: L' abstraction est le concept / la technique utilisée pour identifier ce que devrait être la vue externe d'un objet. Rendre uniquement l'interface requise disponible.

Dissimulation de l'information: elle est complémentaire à l'abstraction, car grâce à la dissimulation de l'information, l'abstraction est réalisée. Cacher tout le reste sauf la vue extérieure.

Encapsulation: liaison des données et des fonctions associées dans une unité. Il facilite l'abstraction et la dissimulation d'informations. Permettre à des fonctionnalités telles que l'accès aux membres d'être appliquées sur l'unité pour obtenir l'abstraction et le masquage des informations

Vikram
la source
2

Voir l'article de Joel sur la loi des abstractions baveuses

JoelOnsoftware

Fondamentalement, l'abstraction vous donne la liberté de penser à des concepts de niveau supérieur. Une analogie non liée à la programmation est que la plupart d'entre nous ne savent pas d'où vient notre nourriture ni comment elle est produite, mais le fait que nous n'ayons (généralement) pas à nous en préoccuper nous libère pour faire d'autres choses, comme programmation.

Quant à la dissimulation d'informations, je suis d'accord avec le brouillage.

Jason Z
la source
2

En très bref

Encapsulation : - Masquage d'informations

Abstraction : - Masquage de la mise en œuvre

Abstractionvous permet de vous concentrer sur what the object doestandis que l'encapsulation signifiehow an object works

Rahul Sharma
la source
1

L'abstraction vous permet de traiter un processus complexe comme un processus simple. Par exemple, l'abstraction standard "fichier" traite les fichiers comme un tableau contigu d'octets. L'utilisateur / développeur n'a même pas à penser aux problèmes de clusters et de fragmentation. (L'abstraction apparaît normalement sous forme de classes ou de sous-programmes.)

Le masquage d'informations consiste à protéger vos abstractions contre les utilisateurs malveillants / incompétents. En restreignant le contrôle de certains états (allocations de disque dur, par exemple) au développeur d'origine, d'énormes quantités de traitement des erreurs deviennent redondantes. Si personne d'autre que le pilote du système de fichiers ne peut écrire sur le disque dur, alors le pilote du système de fichiers sait exactement ce qui a été écrit sur le disque dur et où. (La manifestation habituelle de ce concept est privateet des protectedmots - clés dans les langues OO.)

Zooba
la source
1

Pour faire abstraction de quelque chose, nous devons cacher le détail ou masquer le détail de quelque chose dont nous avons besoin pour l'abstraire. Mais les deux peuvent être obtenus par encapsulation.

Ainsi, la dissimulation d'informations est un objectif, l'abstraction est un processus et l'encapsulation est une technique.

Selo
la source
Pouvez-vous fournir un exemple Java pour le même?
Chinmay
1

L'abstraction signifie simplement la technique dans laquelle seuls les détails essentiels du logiciel sont rendus visibles à l'utilisateur pour aider l'utilisateur à utiliser ou à utiliser un logiciel, ainsi les détails de mise en œuvre de ce logiciel ne sont pas affichés (sont rendus invisibles). L'encapsulation est la technique qui permet aux emballages de contenir un ou plusieurs éléments et, par conséquent, certaines informations (en particulier les détails du programme) sont devenues visibles et d'autres non visibles pour l'utilisateur, de sorte que l'encapsulation est réalisée par le masquage des informations. En résumé. L'abstraction est pour le comportement observable (en externe) et l'encapsulation est pour l'invisibilité (en interne) mais ces deux sont vraiment complémentaires.

MOBITI MAHENGE
la source
1

Juste en ajoutant plus de détails sur InformationHiding , trouvé Ce lien est vraiment une bonne source avec des exemples

InformationHiding est l'idée qu'une décision de conception doit être cachée au reste du système pour éviter un couplage involontaire. InformationHiding est un principe de conception. InformationHiding devrait informer la façon dont vous encapsulez les choses, mais ce n'est bien sûr pas obligatoire .

L'encapsulation est une fonctionnalité du langage de programmation.

Abhijeet
la source
1

L'abstraction et l'encapsulation sont deux des quatre concepts de base de la POO qui vous permettent de modéliser des choses du monde réel en objets afin que vous puissiez les implémenter dans votre programme et votre code. De nombreux débutants se confondent entre l'abstraction et l'encapsulation car ils se ressemblent tous les deux. Si vous demandez à quelqu'un ce qu'est l'abstraction, il vous dira que c'est un concept de POO qui se concentre sur des informations pertinentes en cachant des détails inutiles, et lorsque vous posez des questions sur l'encapsulation, beaucoup vous diront que c'est un autre concept de POO qui cache les données du monde extérieur. Les définitions ne sont pas fausses car l'abstraction et l'encapsulation cachent quelque chose, mais la principale différence réside dans l'intention.

L'abstraction cache la complexité en vous donnant une image plus abstraite, une sorte de vue de 10000 pieds, tandis que l'encapsulation cache le travail interne afin que vous puissiez le changer plus tard. En d'autres termes, l'abstraction masque les détails au niveau de la conception, tandis que l'encapsulation masque les détails au niveau de l'implémentation.

Charith Perera
la source
0

Après avoir lu toutes les réponses ci-dessus une par une, je ne peux pas m'empêcher de poster cela

l'abstraction implique la possibilité de définir des objets qui représentent des «acteurs» abstraits qui peuvent effectuer un travail, rendre compte et changer leur état et «communiquer» avec d'autres objets du système.

L'encapsulation est cependant assez claire d'en haut ->

Le terme encapsulation fait référence à la dissimulation des détails d'état, mais étendre le concept de type de données à partir des langages de programmation antérieurs pour associer le comportement le plus fortement aux données, et normaliser la manière dont les différents types de données interagissent, est le début de l'abstraction.

wiki de référence

utilisateur666
la source
0

J'étais moi aussi très confus à propos des deux concepts d'abstraction et d'encapsulation. Mais quand j'ai vu l' article d'abstraction sur myjavatrainer.com, il est devenu clair pour moi que l'abstraction et l'encapsulation sont des pommes et des oranges, vous ne pouvez pas vraiment les comparer car les deux sont nécessaires.

L'encapsulation est la façon dont l'objet est créé et l'abstraction est la façon dont l'objet est vu dans le monde extérieur.

Navin Israni
la source
0

Encapsulation: liaison des données et des méthodes qui agissent dessus. cela permet de masquer les données de toutes les autres méthodes dans d'autres classes. exemple: MyListclasse qui peut ajouter un élément, supprimer un élément, et supprimer tous les éléments les méthodes add, removeet removeAllagir sur la liste (un tableau privé) qui ne peuvent pas être directement accessible depuis l'extérieur.

Abstraction: cache le comportement et les données non pertinents. La manière dont les éléments sont réellement stockés, ajoutés ou supprimés est masquée (abstraite). Mes données peuvent être conservées dans un simple tableau, ArrayList, LinkedList, etc. De plus, la manière dont les méthodes sont implémentées est cachée de l'extérieur.

Ammar Samater
la source
0

Encapsulation - renforcer l'accès aux données internes de manière contrôlée ou empêcher l'accès direct aux membres.

Abstraction - Le masquage des détails de mise en œuvre de certaines méthodes est appelé abstraction

Comprenons à l'aide d'un exemple: -

class Rectangle
{
private int length;
private int breadth;// see the word private that means they cant be accesed from 
outside world.
 //now to make them accessed indirectly define getters and setters methods
void setLength(int length)
{  
// we are adding this condition to prevent users to make any irrelevent changes 
  that is why we have made length private so that they should be set according to 
   certain restrictions
if(length!=0)
{
 this.length=length
 }
void getLength()
{
 return length;
 }
 // same do for breadth
}

maintenant, pour l'abstraction, définissez une méthode accessible uniquement et l'utilisateur ne sait pas quel est le corps de la méthode et comment cela fonctionne. Considérons l'exemple ci-dessus, nous pouvons définir une zone de méthode qui calcule l'aire du rectangle.

 public int area()
 {
  return length*breadth;
 }

Désormais, chaque fois qu'un utilisateur utilise la méthode ci-dessus, il obtiendra simplement la surface et non la manière dont elle est calculée. Nous pouvons considérer un exemple de méthode println (), nous savons juste qu'elle est utilisée pour l'impression et nous ne savons pas comment elle imprime les données. J'ai écrit un blog en détail, vous pouvez voir le lien ci-dessous pour plus d'informations abstraction vs encapsulation

Rohan Sharma
la source
0

Il convient de noter que ces termes ont des définitions IEEE normalisées, qui peuvent être recherchées sur https://pascal.computer.org/ .

abstraction

  1. vue d'un objet qui se concentre sur les informations pertinentes pour un objectif particulier et ignore le reste des informations
  2. processus de formulation d'une vue
  3. processus de suppression des détails non pertinents pour établir un modèle simplifié, ou le résultat de ce processus

informations cachées

  1. technique de développement logiciel dans laquelle les interfaces de chaque module révèlent le moins possible le fonctionnement interne du module et les autres modules ne peuvent pas utiliser d'informations sur le module qui ne figurent pas dans la spécification d'interface du module
  2. confinement d'une décision de conception ou de mise en œuvre dans un seul module de sorte que la décision soit cachée aux autres modules

encapsulation

  1. technique de développement logiciel qui consiste à isoler une fonction système ou un ensemble de données et d'opérations sur ces données dans un module et à fournir des spécifications précises pour le module
  2. concept selon lequel l'accès aux noms, significations et valeurs des responsabilités d'une classe est entièrement séparé de l'accès à leur réalisation
  3. idée qu'un module a un extérieur distinct de son intérieur, qu'il a une interface externe et une implémentation interne
jaco0646
la source