web-dev-qa-db-fra.com

Différence entre encapsulation et abstraction

J'ai eu une entrevue aujourd'hui. J'avais une question deOOPà propos de la différence entre Encapsulation & Abstraction ?

Je lui ai répondu à ma connaissance que Encapsulation consiste essentiellement à lier les données des membres et leurs fonctions dans une seule unité appelée Class . Considérant que Abstraction vise essentiellement à masquer la complexité de la mise en œuvre et à fournir un accès facile aux utilisateurs. Je pensais qu'elle irait bien avec ma réponse. Mais elle s'est interrogée sur le fait que si les deux objectifs sont de masquer des informations, quelle est la différence réelle entre ces deux éléments? Je ne pouvais lui donner aucune réponse.

Avant de poser cette question, j'ai lu d'autres discussions sur StackOverFlow concernant la différence entre ces deux conceptsOOPs. Mais je ne me trouve pas en mesure de convaincre l'intervieweur.

Quelqu'un peut-il s'il vous plaît justifier par un exemple le plus simple? 

38
WpfBee

Encapsulate masque les variables ou certaines implémentations qui peuvent être si souvent modifiées dans une classe pour empêcher les personnes extérieures d'y accéder directement. Ils doivent y accéder via les méthodes getter et setter.

Abstraction est aussi utilisé pour cacher quelque chose, mais dans un degré supérieur (classe, interface). Les clients qui utilisent une classe abstraite (ou une interface) ne s’intéressent pas à qui ou à qui il s’agissait, ils ont juste besoin de savoir ce qu’elle peut faire.

39
phnkha

Abstraction - est le processus (et le résultat de ce processus) d'identification des caractéristiques essentielles communes pour un ensemble d'objets . On pourrait dire que l'abstraction est le processus de généralisation: tous les objets considérés sont inclus dans un sur-ensemble d'objets, qui possèdent tous des propriétés données (mais sont différents à d’autres égards).

L'encapsulation est le processus consistant à inclure des données et des fonctions manipulant ces données dans une seule unité, de manière à masquer l'implémentation interne du monde extérieur. 

Ceci est une réponse générale non liée à un langage de programmation spécifique (comme ce fut la question). La réponse est donc: l'abstraction et l'encapsulation n'ont rien en commun. Mais leurs implémentations peuvent être liées les unes aux autres (par exemple, en Java: Encapsulation - les détails sont cachés dans une classe, Abstraction - les détails ne sont pas du tout présents dans une classe ou une interface).

9
TT_

Abstraction: Est généralement utilisé pour fournir un accès polymorphe à un ensemble de classes . Une classe abstraite ne peut pas être instanciée, une autre classe devra en dériver pour créer une représentation plus concrète.

Un exemple d'utilisation courante d'une classe abstraite peut être une implémentation d'un modèle de conception de méthode de modèle dans lequel un point d'injection abstrait est introduit afin que la classe concrète puisse l'implémenter de sa propre manière "concrète".

voir: http://en.wikipedia.org/wiki/Abstraction_(computer_science)

Encapsulation: C’est le processus de dissimulation de la complexité d’implémentation d’une classe spécifique au client qui va l’utiliser, gardez à l’esprit que le "client" peut être un programme ou un événement écrit par son auteur. la classe.

voir: http://fr.wikipedia.org/wiki/Encapsulation_(object-oriented_programming)

7
Mortalus

Cette image résume assez bien la différence entre les deux:

 enter image description here

Source ici

3
José Salgado

la différence dans les deux est juste le Point de vue
Encapsulation Word est utilisé pour masquer des données si notre objectif est d’empêcher le client de voir de l’intérieur notre logique.

Abstraction Word est utilisé pour masquer des données si notre objectif est de montrer à notre client une vue extérieure.

Vue extérieure signifie que supposons 

BubbleSort(){
//code 
swap(x,y);
}

ici, nous utilisons le type d'échange à bulle pour montrer simplement à notre client quelle logique nous appliquons, si nous remplaçons le remplacement (x, y) par le code entier ici, dans un cas, il/elle ne comprend pas notre logique

1
Iqbal Haider

Il existe un excellent article qui aborde les différences entre Abstraction, Encapsulation et Information cachée en profondeur: http://www.tonymarston.co.uk/php-mysql/abstraction.txt

Voici la conclusion de l'article:

L'abstraction, la dissimulation d'informations et l'encapsulation sont très différentes, mais très liés, des concepts. On pourrait dire que l’abstraction est un technique qui nous aide à identifier les informations spécifiques qui devraient être visible, et quelles informations doivent être cachées. L'encapsulation est alors la technique permettant de regrouper les informations de manière à masquer ce qui devrait être caché et rendre visible ce qui est destiné à être visible.

1
pulp_fiction

Encapsulation: Code enveloppant et données dans une seule unité. Class est un exemple d'encapsulation, car il enveloppe la méthode et la propriété. 

Abstraction: Masquage des détails internes et affichage des fonctionnalités uniquement. L'abstraction se concentre sur ce que fait l'objet au lieu de savoir comment il le fait. Il fournit une vue généralisée des classes.

int number = 5;
string aStringNumber = number.ToString(); 

Ici, ToString () est une abstraction. Et comment cette variable de mécanisme number convertie en chaîne et initialisée en aStringNumber constitue une encapsulation.

Prenons un exemple réel de calculatrice. L'encapsulation correspond aux circuits internes, à la batterie, etc., qui en font une calculatrice. L'abstraction se compose des différents boutons tels que les boutons On-Off, Clear et autres fournis pour le faire fonctionner.

1
Arif

Encapsulation:

Cacher quelque chose, un peu comme une capsule de médicament. Nous ne savons pas ce qu'il y a dans la capsule, nous la prenons. Comme en programmation - nous masquons simplement un code spécial de méthode ou de propriété et il ne donne que le résultat, identique à capsule. En bref, l'encapsulation masque les données.

Abstraction: 

Abstraction signifie cacher la logique ou la mise en œuvre. Par exemple, nous prenons des comprimés et voyons leur couleur, mais nous ne savons pas à quoi sert ce produit et comment cela fonctionne avec le corps.

1
Zeeshan Haider

Oui, il est vrai que l’abstraction et l’encapsulation consistent à se cacher. 

  • Utiliser uniquement les détails pertinents et masquer les données inutiles au Niveau de conception est appelé Abstraction. (Par exemple, sélectionner uniquement les propriétés pertinentes pour une classe 'Car' afin de la rendre plus abstraite ou plus générale.)

  • Encapsulation masque les données au niveau d'implémentation. Par exemple, comment masquer les données d'un accès direct/externe. Cela se fait en liant les données et les méthodes à une seule entité/unité pour empêcher tout accès externe. Ainsi, l’encapsulation est également appelée masquage de données au niveau de la mise en œuvre.

0
CodeFu

Abstraction

En Java, abstraction signifie cacher l'information au monde réel. Il établit le contrat entre les parties pour indiquer «que devons-nous faire pour utiliser le service». 

Exemple, dans le développement d'API, seules les informations abstraites du service ont été révélées au monde, plutôt que la mise en œuvre réelle. L'interface en Java peut très bien aider à concrétiser ce concept. 

Interface fournit un contrat entre les parties, par exemple, le producteur et le consommateur. Le producteur produit les marchandises sans informer le consommateur de la fabrication du produit. Mais, par l’interface, Producer informe tous les consommateurs du produit qu’il peut acheter. À l'aide de l'abstraction, le producteur peut commercialiser le produit auprès de ses consommateurs. 

Encapsulation:

L'encapsulation est un niveau d'abstraction. La même société de produits essaie de protéger les informations de chaque autre groupe de production. Par exemple, si une entreprise produit du vin et du chocolat, l’encapsulation permet de protéger les informations relatives à la fabrication de chaque produit. 

  1. Si j'ai un package individuel pour le vin et un autre pour le chocolat et si toutes les classes sont déclarées dans le package en tant que modificateur d'accès par défaut, nous effectuons une encapsulation au niveau du package pour toutes les classes.
  2. Dans un package, si nous déclarons chaque classe classée (champ membre) comme Private et disposant d'une méthode publique pour accéder à ces champs, de cette manièreen encapsulant au niveau de la classe ces champs
0
Shaan