144 votes

Différence entre encapsulation et abstraction

J'ai eu un entretien aujourd'hui. J'ai eu une question de OOP sur la différence entre Encapsulation & Abstraction ?

Je lui ai répondu qu'à ma connaissance Encapsulation consiste essentiellement à lier les membres de données et les fonctions membres en une seule unité appelée Classe . Considérant que Abstraction est essentiellement de cacher la complexité de la mise en œuvre et de fournir un accès facile aux utilisateurs. Je pensais qu'elle serait d'accord avec ma réponse. Mais elle m'a demandé, si le but des deux est de cacher des informations, quelle est la différence réelle entre les deux ? Je n'ai pu lui donner aucune réponse.

Avant de poser cette question, j'ai lu d'autres fils de discussion sur StackOverFlow à propos de la différence entre ces deux types d'appareils. OOP s concepts. Mais je ne me trouve pas en mesure de convaincre l'interviewer.

Quelqu'un peut-il le justifier par un exemple simple ?

135voto

namkha87 Points 4308

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

Abstraction est également utilisé pour cacher quelque chose, mais dans une degré supérieur (classe, interface) . Les clients qui utilisent une classe (ou une interface) abstraite ne se soucient pas de ce qu'elle était, ils ont juste besoin de savoir ce qu'elle peut faire.

38voto

José Salgado Points 298

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

enter image description here

Source : aquí

28voto

Arif Points 1714

Encapsulation : Regrouper le code et les données en une seule unité. Class est un exemple d'encapsulation, car il englobe la méthode et la propriété.

L'abstraction : Cacher les détails internes et ne montrer que la fonctionnalité. L'abstraction se concentre sur ce que l'objet fait plutôt que sur comment il le fait. Elle fournit une vue généralisée des classes.

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

Ici, ToString() est une abstraction. Et comment ce mécanisme number convertie en chaîne de caractères et initialisée en aStringNumber est l'encapsulation.

Prenons un exemple concret de calculatrice. L'encapsulation correspond aux circuits internes, à la batterie, etc., qui se combinent pour en faire une calculatrice. L'abstraction est constituée par les différents boutons tels que on-off, clear et autres boutons fournis pour l'utiliser.

15voto

TT_ Points 327

L'abstraction - est le processus (et le résultat de ce processus) d'identification des caractéristiques essentielles communes à 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 qui consiste à enfermer les données et les fonctions manipulant ces données dans une seule unité, afin de cacher la mise en œuvre interne au monde extérieur.

Il s'agit d'une réponse générale qui n'est pas liée à un langage de programmation spécifique (comme l'était 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).

11voto

RCvaram Points 1987

Oui ! !!! Si je dis L'encapsulation est une sorte d'abstraction de portée spécifique avancée. ,

Combien d'entre vous ont lu/supprimé ma réponse ? Essayons de comprendre pourquoi je dis cela.

J'ai besoin de clarifier deux choses avant ma demande.

L'un est le masquage des données et l'autre est l'abstraction.

Masquage des données

La plupart du temps, nous ne donnerons pas un accès direct à nos données internes. Nos données internes ne doivent pas sortir directement, c'est-à-dire qu'une personne extérieure ne peut pas accéder directement à nos données internes. C'est une question de sécurité puisque nous devons protéger les états internes d'un objet particulier.

Abstraction

Pour simplifier, cacher les implémentations internes est appelé abstraction. Dans l'abstraction, nous nous concentrons uniquement sur les choses nécessaires. Fondamentalement, nous parlons de "quoi faire" et non de "comment faire" dans l'abstraction. La sécurité peut également être obtenue par l'abstraction puisque nous n'allons pas mettre en évidence "comment nous mettons en œuvre". La maintenabilité sera augmentée puisque nous pouvons modifier l'implémentation mais cela n'affectera pas notre utilisateur final.

J'ai dit : "L'encapsulation est une sorte d'abstraction de portée spécifique avancée". Pourquoi ? parce que nous pouvons voir l'encapsulation comme une dissimulation de données + abstraction.

encapsulation = dissimulation de données + abstraction

Dans l'encapsulation, nous devons cacher les données afin que la personne extérieure ne puisse pas les voir et nous devons fournir des méthodes qui peuvent être utilisées pour accéder aux données. Ces méthodes peuvent avoir des validations ou d'autres caractéristiques à l'intérieur de ces choses également cachées à une personne extérieure. Donc, ici, nous cachons l'implémentation des méthodes d'accès et cela s'appelle l'abstraction.

C'est pourquoi j'ai dit comme ci-dessus que l'encapsulation est une sorte d'abstraction.

Alors, où se trouve le différence ?

La différence est que l'abstraction est générale si nous cachons quelque chose à l'utilisateur pour des raisons de simplicité, de maintenabilité et de sécurité,

L'encapsulation est un concept spécifique lié à la sécurité des états internes, dans lequel nous cachons l'état interne (dissimulation des données) et nous fournissons des méthodes pour accéder aux données. La mise en œuvre de ces méthodes est également cachée à la personne extérieure (abstraction).

Pourquoi nous avons besoin d'abstraction Lorsque vous faites des conceptions, vous ne parlez pas d'implémentations. Vous dites que si vous donnez ces paramètres à cette méthode, elle donnera ces résultats. Nous cachons l'implémentation interne de la méthode et parlons de ce qu'elle va faire, c'est donc une abstraction.

Exemple

public int add(int a, int b);

Cette définition de méthode nous dit que si vous donnez deux variables, elle fera l'addition et retournera le résultat.

Ici, nous ne regarderons pas l'implémentation et nous ne verrons que ce que cette méthode fait et non comment elle le fait. Les implémentations des méthodes peuvent être différentes selon les développeurs. 1.

public int add(int a, int b){
   return a + b; 
}

public int add(int a, int b){

   return b + a; 
}

Deux méthodes font la même chose, mais leur mise en œuvre diffère.

En gros,

L'abstraction est nécessaire pour modéliser le système. L'encapsulation est nécessaire pour renforcer la sécurité du système.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X