Abstraction VS masquage de L'Information VS Encapsulation

pouvez-vous me dire quelle est la différence entre abstraction et masquage d'information dans le développement de logiciels?

je suis confus. L'Abstraction cache la mise en œuvre détaillée et informations cachant des résumés des détails entiers de quelque chose.

Update: j'ai trouvé une bonne réponse pour ces trois concepts. voir la réponse séparée sous pour plusieurs citations tirées de il .

151
demandé sur Community 2008-08-24 01:41:49

19 réponses

allez à la source! Grady Booch dit (dans l'Analyse Orientée Objet et des Design, page 49, deuxième édition):

Abstraction et encapsulation sont des concepts complémentaires: abstraction se concentre sur les comportements observables d'un objet... encapsulation se concentre sur la mise en œuvre qui donne lieu à ce comportement... l'encapsulation s'effectue le plus souvent par dissimulation d'informations, ce qui est le processus de cacher tous les secrets de l'objet qui ne sont pas contribuer à ses caractéristiques essentielles.

en d'autres termes: abstraction = l'objet extérieurement; encapsulation (réalisée par masquage de l'information) = l'objet intérieurement,

exemple: Dans le Framework .NET, la classe System.Text.StringBuilder fournit une abstraction au-dessus d'un tampon de chaîne. Cette abstraction de tampon vous permet de travailler avec le tampon sans égard pour son implémentation. Ainsi, vous êtes en mesure d'ajouter des chaînes à la buffer sans égard pour la façon dont le StringBuilder garde en interne la trace de choses telles que le pointeur vers le buffer et la gestion de la mémoire quand le buffer est plein (ce qu'il fait avec encapsulation via masquage d'informations).

rp

144
répondu rp. 2014-01-07 06:30:53

l'OP 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 suis en train de re-poster une version légèrement étoffée et reformatée de la mise à jour de L'OP, car cela devrait être une réponse en soi.

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

l'Abstraction:

" un point de confusion concernant l'abstraction est son utilisation à la fois comme procédé 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 essentiels. L'Abstraction, en tant qu'entité, désigne un modèle, une vue ou une autre représentation ciblée d'un élément réel."

Informations Cachées:

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

"l'Abstraction peut être [...] utilisé comme une technique pour identifier les informations qui doivent être cachés."

" il peut y avoir Confusion lorsque les gens ne font pas la distinction entre le fait de cacher des informations, et une technique (par exemple, l'abstraction) qui est utilisée pour aider à identifier l'information qui doit être cachée."

Encapsulation:

"Il [...] se réfère à la construction d'une capsule, dans le cas d'une barrière conceptuelle, autour d'un ensemble de choses." -[Wirfs-Brock et al, 1990]

" en tant que procédé, l'encapsulation signifie l'acte de placer un ou plusieurs articles dans un conteneur [ ... ]. L'Encapsulation, en tant qu'entité, se réfère à un paquet ou à une enveloppe qui contient (contient, entoure) un ou plusieurs articles."

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

Conclusion:

" L'Abstraction, la dissimulation de l'information et l'encapsulation sont des concepts très différents, mais très liés. On pourrait soutenir que l'abstraction est une technique qui nous aide à déterminer quelles informations spécifiques devraient être visibles et quelles informations devraient être cachées. L'Encapsulation est alors la technique d'empaquetage de l'information de manière à masquer ce qui doit être caché et à rendre visible ce qui est censé être visible."

70
répondu stakx 2014-12-30 07:51:28

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

Information Hiding cache les données qui sont affectées par cette mise en œuvre. L'utilisation de private et public entre dans cette catégorie. Par exemple, Cacher les variables des classes.

Encapsulation regroupe simplement toutes les données et fonctions similaires dans un groupe E. g Class en programmation; Packet en réseau.

grâce à L'utilisation de Classes, nous mettons en œuvre les trois concepts - Abstraction , Information Hiding et Encapsulation

44
répondu Shashwat 2014-05-25 08:16:54

Merci de ne pas compliquer les concepts simples.

Encapsulation : le regroupement des données et des méthodes en une seule unité est L'Encapsulation (p.ex. Classe)

Abstraction : il s'agit d'un acte consistant à représenter uniquement les choses essentielles sans inclure de détails sur l'arrière-plan. (p.ex. Interface)

FOR EXAMPLES AND MORE INFO GOTO:

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

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

définitions approuvées ici

P. S.: je me souviens aussi de la définition d'un livre nommé C++ par Sumita Arora que nous lisons en 11ème classe ;)

28
répondu Rashy 2012-08-09 05:32:38

Le sens de l'abstraction donné par le Dictionnaire Oxford English dictionary (OED) les plus proches du sens voulu ici est "L'acte de se séparer de la pensée". Une meilleure définition pourrait être " représenter les caractéristiques essentielles d'une chose sans inclure le contexte ou des détails essentiels.

la dissimulation de L'Information est le principe selon lequel les utilisateurs d'un composant logiciel (tel qu'une classe) ne doivent connaître que les détails essentiels de la façon d'initialiser et d'accéder au composant, et n'ont pas besoin de connaître les détails de la mise en œuvre.

Edit : il me semble que l'abstraction est le processus de décider quelles parties de la mise en œuvre qui devrait être caché .

donc ce n'est pas l'abstraction contre la dissimulation de l'information. C'est de l'information qui se cache par abstraction.

5
répondu jamting 2008-08-23 22:27:04

L'Abstraction cache des détails de mise en œuvre comme vous le dites.

vous abstraites quelque chose à un point assez élevé que vous aurez seulement à faire quelque chose de très simple pour effectuer une action.

se cacher de l'Information est de cacher les détails d'implémentation. La programmation est dur. Vous pouvez avoir beaucoup de choses à s'occuper et à manipuler. Il peut y avoir des variables que vous voulez/devez suivre de très près. Cacher des informations garantit que personne accidentellement casse quelque chose en utilisant une variable ou méthode exposée au public.

ces deux concepts sont très étroitement liés dans la programmation orientée objet.

3
répondu Dan Herbert 2012-10-01 14:21:38

Abstraction

Abstraction est un acte de représenter des détails essentail sans inclure les détails de fond. Une classe abstraite n'a que des signatures de méthode et la classe implementing peut avoir sa propre implémentation, de cette façon 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 une séparation des interfaces de l'implémentation réelle.

Encapsulation

Encapsulation explique la liaison des membres de données et des méthodes en une seule unité. La dissimulation d'informations est le but principal de l'encapsulation. L'Encapsulation est obtenue en utilisant des spécificateurs d'accès comme privé, public, protégé. Les variables des membres de la classe sont rendues privées de sorte qu'elles ne peuvent pas être accessibles directement au monde extérieur. Encapsulation se concentre sur la vue intérieure. En d'autres termes, L'Encapsulation est une technique utilisée pour les informations dans un objet de l'autre objet.

3
répondu Harleen 2016-06-29 07:43:05

Encapsulation: lier les membres de données et les fonctions de membre ensemble est appelé encapsulation. l'encapsulation se fait par classe. abstraction: Cacher les détails d'implémentation de l'usage ou de la vue est appelé abstraction. ex: int x; nous ne savons pas comment int va travailler à l'interne. mais nous savons que l'int fonctionnera. c'est l'abstraction.

2
répondu Siva Prasad 2011-08-17 12:50:56

Abstraction - il s'agit du processus d'identification des caractéristiques essentielles d'un objet sans inclure les détails hors de propos et fastidieux.

Encapsulation - il s'agit du processus consistant à enfermer des données et des fonctions manipulant ces données en une seule unité.

d'Abstraction et d'Encapsulation sont liés, mais concepts complémentaires.

  1. L'Abstraction est le processus. L'Encapsulation est le mécanisme par lequel L'Abstraction est mise en œuvre.

  2. Abstraction se concentre sur le comportement observable d'un objet. Encapsulation se concentre sur la mise en œuvre qui donne lieu à ce comportement.

cacher des informations - c'est le processus de cacher les détails de mise en œuvre d'un objet. C'est un résultat de l'Encapsulation.

2
répondu Aatish Agarwal 2013-05-12 10:16:55

Abstraction: L'Abstraction est le concept/la technique utilisé pour identifier ce qui devrait être la vue externe d'un objet. Seulement les interfaces disponibles.

la dissimulation de L'Information: elle est complémentaire de l'Abstraction, car l'Abstraction est réalisée par la dissimulation de l'information. Cachant tout sauf la vue extérieure.

Encapsulation : Est la liaison de données et fonctions connexes dans une unité. Elle facilite L'Abstraction et la dissimulation de l'information. Permettre l'application de fonctionnalités telles que l'accès aux membres sur l'unité pour réaliser L'Abstraction et la dissimulation de L'Information

2
répondu Vikram 2015-07-22 00:17:10

Voir Joel post sur le Droit des Abstractions qui fuient

JoelOnsoftware

fondamentalement, l'Abstraction vous donne la liberté de penser à des concepts de niveau supérieur. Une analogie hors programmation est que la plupart d'entre nous ne savons pas d'où vient notre nourriture, ni comment elle est produite, mais le fait que nous (habituellement) n'avons pas à nous en inquiéter nous libère pour faire d'autres choses, comme la programmation.

comme pour cacher des informations, je suis d'accord avec jamting.

2
répondu Jason Z 2017-09-14 14:21:37

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

la dissimulation d'informations vise à protéger vos abstractions contre les utilisateurs malveillants/incompétents. En limitant le contrôle de certains États (disque dur par exemple) au développeur d'origine, d'énormes quantités de gestion d'erreurs deviennent redondantes. Si personne d'autre que le pilote de système de fichiers ne peut écrire sur le disque dur, alors le pilote de système de fichiers sait exactement ce qui a été écrit sur le disque dur et où. (La manifestation habituelle de ce concept est private et protected mots-clés en OO langues.)

1
répondu Zooba 2008-08-24 00:29:47

pour abstraire quelque chose, nous devons cacher le détail ou cacher le détail de quelque chose que nous devons abstraire. Mais, les deux peuvent être atteints par encapsulation.

ainsi, la dissimulation de l'information est un but, l'abstraction est un processus, et l'encapsulation est une technique.

1
répondu Selo 2009-11-12 09:17:24

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 à opérer avec le Logiciel, ainsi les détails de mise en œuvre de ce Logiciel ne sont pas affichés(sont rendus invisibles). Encapsulation est la technique qui ont un paquet qui contient un ou plusieurs articles et donc certaines des informations (en particulier les détails du programme) sont devenus visibles et certains non visibles pour l'utilisateur, donc l'encapsulation est réalisée par la dissimulation de l'information. En résumé. Abstraction est pour le comportement observable (extérieurement) et l'encapsulation est pour l'invisibilité (intérieurement) mais ces deux sont vraiment complémentaires.

1
répondu MOBITI MAHENGE 2013-04-19 20:20:26

juste ajouter plus de détails autour de InformationHiding , trouvé ce lien est vraiment une bonne source avec des exemples

InformationHiding , c'est l'idée qu'une décision de conception devrait être caché du reste du système afin de prévenir les imprévus de couplage. InformationHiding est un principe de conception. InformationHiding devrait informer de la façon dont vous encapsuler "151920920 des" choses", 151910920" mais bien sûr, il n'a pas à .

Encapsulation est une caractéristique du langage de programmation.

1
répondu Abhijeet 2016-06-28 10:48:58

moi aussi j'étais très confus au sujet des deux concepts D'Abstraction et D'Encapsulation. Mais quand j'ai vu le abstraction article 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 parce que les deux sont nécessaires.

Encapsulation est la façon dont l'objet est créé, et l'abstraction est la façon dont l'objet est considéré dans le monde extérieur.

1
répondu Navin Israni 2016-11-27 14:27:50

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

abstraction implique l'installation de définir des objets qui représentent abstrait "acteurs" qui peut effectuer des travaux, un rapport et une modification de leur état et de "communiquer" avec d'autres objets dans le système.

Encapsulation est assez clair d'en haut cependant - >

le terme encapsulation se réfère à la dissimulation des détails de l'état, mais l'extension du concept de type de données à partir des langages de programmation plus tôt pour associer le comportement le plus fortement avec les données, et la normalisation de la façon dont les différents types de données interagissent, est le début de l'abstraction.

référence wiki

0
répondu user666 2015-04-19 20:18:50

Encapsulation: données de liaison et les méthodes qui agissent sur elle. cela permet de cacher des données de toutes les autres méthodes dans d'autres classes. exemple: MyList classe qui peut ajouter un article, supprimer un élément, puis retirez tous les éléments les méthodes add , remove , et removeAll agissent sur la liste(un réseau privé) qui ne peut pas être accédé directement de l'extérieur.

Abstraction: cache le non pertinent le comportement et les données. Comment les articles sont stockés, ajoutés ou supprimés est caché (abstrait). Mes données peuvent être tenues dans le tableau simple, ArrayList, LinkedList, et ainsi de suite. En outre, la façon dont les méthodes sont mises en œuvre est cachée de l'extérieur.

0
répondu Ammar Samater 2018-03-12 10:27:11

Encapsulation-forcer l'accès aux données internes d'une manière contrôlée ou empêcher les membres d'être directement accessibles.

Abstraction-Cacher les détails de mise en œuvre de certaines méthodes est connu sous le nom d'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éfinir une méthode qui ne peut être consultée et l'utilisateur ne sait pas qu'est-ce que le corps de la méthode et comment il est de travail Considérons l'exemple ci-dessus, nous pouvons définir une zone de méthode qui calcule la zone du rectangle.

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

maintenant, chaque fois qu'un utilisateur utilise la méthode ci-dessus, il obtiendra juste la zone pas la façon dont il est calculé. On peut considérer un exemple d'println() la méthode nous savons juste qu'il est utilisé pour l'impression et nous ne savons pas comment il imprime les données. J'ai écrit un blog en détail vous pouvez voir le lien ci-dessous pour plus d'info abstraction vs encapsulation

0
répondu Rohan Sharma 2018-08-05 14:46:15