web-dev-qa-db-fra.com

Encapsulation vs Abstraction?

Voici les brèves définitions de l’encapsulation et de l’abstraction.

Abstraction:

Le processus d'abstraction en Java est utilisé pour masquer certains détails et montre seulement les caractéristiques essentielles de l'objet. En d'autres termes, il traite de la vue extérieure d'un objet (interface). Le seul bon exemple que je vois pour cela sur différents sites est interface.

Encapsulation:

Il s’agit essentiellement de cacher l’objet à l’aide de des modificateurs tels que privé, public, protégé, etc., nous exposons l'état par le biais de méthodes publiques que si nécessaire.

Ce que nous réalisons avec des modificateurs tels que private, public cache également des détails inutiles du monde extérieur qui n’est rien mais aussi un concept d’abstraction.

Ainsi, à partir de l'explication ci-dessus, l'encapsulation fait partie de l'abstraction ou nous pouvons dire que c'est un sous-ensemble de l'abstraction. Mais pourquoi alors le terme d’encapsulation est-il inventé alors que nous ne pouvions le traiter que par abstraction? Je suis sûr qu’il devrait y avoir une différence majeure qui les distingue, mais la plupart des documents diffusés sur le net disent à peu près la même chose pour les deux.

Bien que cette question ait déjà été posée sur ce forum aussi, mais je la poste à nouveau avec des doutes spécifiques. Certaines réponses disent également que l'abstraction est un concept et que l'encapsulation est une implémentation. Mais je n'achète pas ceci - si c'est vrai, je peux penser que ces deux concepts différents sont fournis pour nous embrouiller.

Mise à jour: - Après 5 ans, je viens avec ma propre réponse qui est la Gist basée sur les réponses dans ce post et ci-dessous

  1. différence entre abstraction et encapsulation?
  2. exemple du monde réel entre encapsulation et abstraction
124
M Sach

L'encapsulation est une stratégie utilisée dans le cadre de l'abstraction. L'encapsulation fait référence à l'état des objets - les objets encapsulent leur état et le cachent de l'extérieur; des utilisateurs extérieurs à la classe interagissent avec elle par le biais de ses méthodes, mais ne peuvent pas accéder directement à l'état des classes. Donc, la classe abstracts éloigne les détails de la mise en oeuvre liés à son état.

Abstraction est un terme plus générique, il peut également être atteint par (entre autres) des sous-classes. Par exemple, l'interface List dans la bibliothèque standard est une abstraction pour une séquence d'éléments, indexée par leur position. Des exemples concrets de List sont des ArrayList ou LinkedList. Code qui interagit avec un résumé List avec le détail du type de liste utilisé.

L'abstraction n'est souvent pas possible sans masquer l'état sous-jacent par encapsulation - si une classe expose son état interne, elle ne peut pas changer son fonctionnement interne et ne peut donc pas être abstraite.

93
Martin Probst

Abstraction est l’idée de décrire quelque chose en termes plus simples, c’est-à-dire d’abréger les détails afin de se concentrer sur ce qui est important (c’est aussi le cas dans l’art abstrait, par exemple, où images, telles que la couleur ou les formes). La même idée se traduit par OOP en utilisant une hiérarchie d'héritage, où des concepts plus abstraits sont au sommet et des idées plus concrètes, au bas, développant leurs abstractions. À son niveau le plus abstrait, il n’ya aucun détail sur la mise en œuvre et peut-être très peu de points communs, qui sont ajoutés à mesure que l’abstraction diminue.

Par exemple, en haut, une interface avec une seule méthode peut être utilisée, puis le niveau suivant fournit plusieurs classes abstraites, qui peuvent ou non compléter certains des détails concernant le niveau supérieur, mais les branches en ajoutant leurs propres méthodes abstraites , puis pour chacune de ces classes abstraites, il existe des classes concrètes fournissant les implémentations de toutes les méthodes restantes.

Encapsulation est une technique. Ce peut être ou ne pas être pour aider à l'abstraction, mais il s'agit certainement de dissimulation d'informations et/ou d'organisation. Cela exige que les données et les fonctions soient regroupées d’une manière ou d’une autre - bien sûr, la bonne OOP exige qu’elles soient regroupées par abstraction. Cependant, il existe d'autres utilisations qui facilitent simplement la maintenabilité, etc.

113
Robert

l'encapsulation fait partie de l'abstraction ou on peut dire que c'est un sous-ensemble de abstraction

Ce sont des concepts différents. 

  • L'abstraction est le processus permettant d'affiner tous les attributs inutiles/non importants d'un objet et de ne conserver que les caractéristiques Les mieux adaptées à votre domaine. 

    Par exemple. pour une personne: vous décidez de conserver votre nom, votre prénom et votre numéro de sécurité sociale. L'âge, la taille, le poids, etc. ne sont pas pris en compte. 

    L'abstraction est le point de départ de votre conception.

  • L'encapsulation est la prochaine étape dans laquelle elle reconnaît les opérations appropriées sur les attributs Que vous avez accepté de conserver pendant le processus d'abstraction. C'est l'association des données avec l'opération qui agit sur elles.
    C'est à dire. les données et les méthodes sont regroupées.
29
Cratylus

L'encapsulation est cachée inutile données dans une capsule ou une unité

L'abstraction est montrant essentiel caractéristique d'un objet

Encapsulation est utilisé pour masquer son membre de la classe et de l’interface extérieures. À l’aide des modificateurs d’accès fournis dans c #, comme public, privé, protégé, etc.

Class Learn
{
  private int a;         // by making it private we are hiding it from other
  private void show()   //class to access it
  {
   console.writeline(a);
  }
}

Nous avons ici des données enveloppantes dans une unité ou une capsule, c’est-à-dire la classe.

L'abstraction est juste en face de l'encapsulation.

L’abstraction est utilisée pour montrer des données importantes et pertinentes à l’utilisateur. C'est l'abstraction, parce que vous ne voyez que des informations pertinentes au lieu de leur ingénierie interne.

 abstract class MobilePhone
    {
        public void Calling();       //put necessary or essential data
        public void SendSMS();       //calling n sms are main in mobile
    }

    public class BlackBerry : MobilePhone   // inherited main feature
    {
        public void FMRadio();            //added new
        public void MP3();
        public void Camera();
        public void Recording();

    }
24
varsha

L'abstraction est un terme très général et l'abstraction dans les logiciels ne se limite pas aux langages orientés objet. Une définition du dictionnaire: "le fait de considérer quelque chose comme une qualité générale ou une caractéristique, en dehors des réalités concrètes, des objets spécifiques ou des instances réelles".

Le langage d'assemblage peut être considéré comme une abstraction du code machine - Assembly exprime les détails essentiels et la structure du code machine, mais vous évite de penser aux opcodes utilisés, à la disposition du code en mémoire, ce qui rend les sauts aller à la bonne adresse, etc.

L'API de votre système d'exploitation est une abstraction de la machine sous-jacente. Votre compilateur fournit une couche d’abstraction qui vous protège des détails du langage Assembly. La pile TCP/IP intégrée à votre système d’exploitation supprime les détails de la transmission de bits sur un réseau. Si vous descendez jusqu'au silicium brut, les concepteurs de votre CPU l'ont fait en utilisant des schémas de circuit écrits en termes de "diodes" et de "transistors", qui sont des abstractions du passage des électrons dans les cristaux semi-conducteurs.

Dans le logiciel, tout est une abstraction. Nous construisons des programmes qui simulent ou modélisent certains aspects de la réalité, mais nos modèles font nécessairement abstraction de certains détails de la "réalité". Nous construisons couche sur couche sur couche d'abstractions, parce que c'est la seule façon de faire quoi que ce soit. (Imaginez que vous essayez de créer, par exemple, un résolveur de sudoku et que vous deviez le concevoir en utilisant uniquement des cristaux semi-conducteurs. "OK, il me faut un morceau de silicium de type N ici ...")

En comparaison, "encapsulation" est un terme très spécifique et limité. Certaines des autres réponses à cette question ont déjà donné de bonnes définitions.

14
Alex D

Répondre à ma propre question après 5 ans, car j'estime qu'il faut encore plus de détails.

Abstraction:

Définition technique: - L'abstraction est un concept permettant de masquer des détails inutiles (complexes ou simples) et de ne montrer que les caractéristiques essentielles de l'objet. Il n'y a pas de mise en oeuvre. C'est un concept

Qu'est-ce que cela signifie concrètement: - Quand je dis que mon entreprise a besoin d'un support/périphérique permettant aux employés de se connecter au client. C'est la forme la plus pure d'abstention (comme interfaceen Java), car ce périphérique/support peut être le téléphone, Internet, Skype, en personne ou par e-mail, etc. Je ne vais pas m'attarder à rien.

Même lorsque je dis que mon entreprise a besoin d'un support/périphérique afin que ses employés puissent se connecter au client via un appel vocal. Ensuite, je parle aussi abstraite, mais au niveau le plus bas, car le périphérique/support peut être un téléphone, skype ou autre chose, etc.

Maintenant, quand je dis que mon entreprise a besoin d’un téléphone pour que les employés puissent se connecter au client par appel vocal. Ensuite, je parle aussi abstraitement, mais au niveau le plus bas, car le téléphone peut être de toute entreprise telle que iphone, samsung ou nokia, etc.

Encapsulation: - Il s'agit essentiellement de masquer l'état (information) d'un objet à l'aide de modificateurs tels que privé, public, protégé, etc. nous exposons l'état via des méthodes publiques uniquement si nécessaire.

Qu'est-ce que cela signifie concrètement: - Maintenant, quand je dis que mon entreprise a besoin d'un iphone pour que ses employés puissent se connecter au client par appel vocal.Maintenant, je parle d'un objet concret (comme un iphone). Même si Je ne vais pas dans les détails de l'iphone ici aussi, mais l'iphone a un état/une information concrète/concrète associée à celle-ci là où l'appareil/le support n'a pas. Lorsque je dis Objet concret, cela signifie en fait tout objet auquel une implémentation/information (non complète comme la classe abstraite Java) lui est associée. 

Donc, iphone a effectivement utilisé ici l’encapsulation comme stratégie pour cacher son état/information et n’exposer que ceux qu’elle pense devoir être exposés. Donc, l’abstraction et l’encapsulation masquent certains détails inutiles, mais l’abstraction au niveau du concept Et l’encapsulation au niveau de la mise en œuvre

Ceci est le Gist basé sur les réponses dans ce post et ci-dessous

  1. différence entre abstraction et encapsulation?
  2. exemple du monde réel entre encapsulation et abstraction
13
M Sach

Encapsulation - processus consistant à masquer des composants de la classe afin d'empêcher tout accès direct depuis l'extérieur. Pour ce faire, il utilise un modificateur "privé" afin d'empêcher l'accès direct à certains membres de la classe (champ ou méthode de données) à partir d'autres classes ou objets tout en permettant à ces membres privés d'accéder à ces membres privés (Interface). Cela rend les membres de la classe protégés en tant qu’organes humains cachés/encapsulés sous la peau ou sous un bouclier.

Abstraction - Un principe doit être suivi dans l'écriture du programme OOP qui dit "vous devez inclure dans la classe uniquement les composants qui sont intéressants pour la tâche du programme". Par exemple: l’élève objet a beaucoup de caractères en tant qu’être humain: nom, âge, poids, couleur des cheveux, couleur des yeux, etc. Cependant, lorsque vous créez une classe dans OOP pour travailler avec des élèves, vous ne devez inclure que ces caractères qui importent vraiment pour la base de données des étudiants: nom, âge, spécialité, niveau, marques, etc., etc. ____. En C++, vous pouvez créer une classe abstraite en utilisant le modificateur "virtual" avec toutes les méthodes de la classe. il est inutilisable en mode direct, mais vous pouvez en dériver d'autres classes et créer une implémentation pour ses membres en ajoutant les membres requis en fonction de la tâche.

5
Red

Voici comment je l'ai compris:

En programmation orientée objet, nous avons quelque chose appelé classes. À quoi servent-ils? Ils doivent stocker un état et certaines méthodes pour changer cet état, c'est-à-dire qu'ils sontencapsulatingstate et ses méthodes. 

Elle (classe) ne se soucie pas de la visibilité de son propre ou de son contenu. Si nous choisissons de masquer l'état ou certaines méthodes, il s'agit deinformation masquant.

Maintenant, prenons le scénario d'un héritage. Nous avons une classe de base et un couple de classes dérivées (héritées). Alors, que fait la classe de base ici? C'est abstraite certaines choses des classes dérivées.

Tous sont différents, non? Mais nous les mélangeons pour écrire de bons programmes orientés objet. J'espère que ça aide :)

4
abhilash

L'abstraction délimite une représentation simplifiée, spécifique au contexte, de quelque chose; il ignore les détails non pertinents sur le plan et inclut des détails importants sur le plan contextuel.

L'encapsulation restreint l'accès en dehors des parties de quelque chose et des bundles l'état de cet objet aux procédures qui l'utilisent.


Prenez des gens, par exemple. Dans le contexte de la chirurgie, une abstraction utile ignore les croyances religieuses d'une personne et inclut son corps. De plus, les gens encapsulent leurs mémoires avec les processus de pensée qui les utilisent. Une abstraction n'a pas besoin d'être encapsulée; Par exemple, une peinture représentant une personne ne cache pas ses parties et ne lie pas les procédures à son état. Et, l’encapsulation n’a pas besoin d’être associée à une abstraction; Par exemple, de vraies personnes (et non des personnes abstraites) encapsulent leurs organes avec leur métabolisme.

3
Shaun Luttin

Essayons de comprendre d'une manière différente.

Que peut-il se passer si l’abstraction n’est pas là et que peut-il se passer si l’encapsulation n’est pas là?.

Si Abstraction n’est pas là, vous pouvez dire que l’objet est moins utilisé. Vous ne pouvez pas identifier l'objet ni accéder à aucune fonctionnalité de celui-ci. Prenons un exemple de téléviseur. Si vous ne pouvez pas allumer, changer de chaîne, augmenter ou diminuer le volume, etc., quelle est l’utilisation de la télévision et comment l’utilisez-vous?

Si Encapsulation n’est pas là ou n’est pas implémenté correctement, vous pouvez utiliser cet objet à mauvais escient. Là, par les données/composants peuvent être mal utilisés. Prenons le même exemple de téléviseur. Si aucune encapsulation n’est effectuée sur le volume du téléviseur, le contrôleur de volume risque d’être mal utilisé en le faisant descendre ou au-delà de sa limite (0-40/50).

1
satya

NOTE: Je partage ceci. Cela ne veut pas dire que la réponse n’est pas bonne mais parce que j’ai bien compris.

Réponse:

Lorsqu'une classe est conceptualisée, quelles sont les propriétés que nous pouvons en avoir compte tenu du contexte. Si nous concevons une classe Animal dans le contexte d'un zoo, il est important que nous ayons un attribut animalType pour décrire le type domestique ou sauvage. Cet attribut peut ne pas avoir de sens lorsque nous concevons la classe dans un contexte différent.

De même, quels sont les comportements que nous allons avoir en classe? L'abstraction est également appliquée ici. Que faut-il avoir ici et qu'est-ce qu'une surdose? Ensuite, nous avons coupé certaines informations de la classe. Ce processus applique l'abstraction.

Quand nous demandons une différence entre encapsulation et abstraction, je dirais que encapsulation utilise l'abstraction comme concept. Alors, est-ce seulement une encapsulation? Non, l'abstraction est même un concept appliqué dans le cadre de l'héritage et du polymorphisme.

Go ici pour plus d'explications sur ce sujet.

1
Yubaraj

Encapsulation protège le comportement interne d'objet/instance à partir d'une entité externe. Un contrôle doit donc être fourni pour confirmer que les données fournies ne vont pas nuire au système interne instance/objet pour survivre.

Bon exemple, Divider est une classe qui a deux instances de dividende et diviseur variables et une méthode getDividedValue.

Pouvez-vous penser que si le diviseur est défini sur 0, le système/comportement interne (getDivided) se cassera.

Ainsi, le comportement interne de l'objet peut être protégé en lançant une exception via une méthode.

1
Ranjit Kumar

dans une phrase simple, je peux dire: l’essence de l’abstraction consiste à extraire des propriétés essentielles tout en omettant les détails non essentiels. Mais pourquoi devrions-nous omettre des détails non essentiels? Le facteur de motivation clé est la prévention du risque de changement. Vous pourriez considérer que l’abstraction est identique à l’encapsulation. Mais encapsulation signifie l'acte de contenir un ou plusieurs articles dans un conteneur, pas de cacher des détails. Si vous faites valoir que "tout ce qui était encapsulé était aussi caché". Ce n'est évidemment pas vrai. Par exemple, même si les informations peuvent être encapsulées dans des structures et des tableaux d’enregistrements, ces informations ne sont généralement pas masquées (sauf si elles sont masquées via un autre mécanisme).