Encapsulation vs abstraction?

137

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 n'afficher que 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 l'interface.

Encapsulation:

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

Ce que nous réalisons avec des modificateurs comme private, publiccache également les détails inutiles du monde extérieur qui n'est rien d'autre qu'un concept d'abstraction

Donc, à partir de l'explication ci-dessus, on dirait que 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 pourrions le traiter qu'avec l'abstraction? Je suis sûr qu'il devrait y avoir une différence majeure qui les distingue, mais la plupart des documents sur le net disent presque la même chose pour les deux.

Bien que cette question ait été soulevée sur ce forum plus tôt, je la poste à nouveau avec des doutes spécifiques. Certaines réponses indiquent également que l'abstraction est un concept et que l'encapsulation est une mise en œuvre. Mais je n'achète pas cela - Si c'est vrai, alors je peux penser que ces deux concepts différents sont fournis pour nous confondre.

Mise à jour: - Après 5 ans, j'ai trouvé ma propre réponse qui est l'essentiel sur la base des réponses dans cet article et ci-dessous

  1. différence entre abstraction et encapsulation?
  2. encapsulation vs abstraction exemple du monde réel
M Sach
la source
l'encapsulation telle que définie ci-dessus est un outil d'abstraction, mais j'ai tendance à le penser en termes de ce qu'une classe encapsule (fonctionnalité / données indépendamment de l'accès) alors que l'abstraction est plus un sentiment de vous éloigner des préoccupations d'implémentations concrètes, c'est-à-dire quelle que soit la manière dont c'est fait et ce qui est fait exactement c'est faisable à partir de wikipediaAn 'abstraction' (noun) is a concept that acts as a super-categorical noun for all subordinate concepts, and connects any related concepts as a group, field, or category.
TI
L'encapsulation consiste davantage à lier les détails pertinents (données et comportements qui opèrent sur les données) relatifs au contexte. Cela peut également être réalisé sans spécificateurs d'accès comme private public, car ils ne fournissent que des informations / données cachées que nous le faisons car il est recommandé de protéger les données de l'instance.
user3227986

Réponses:

98

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; les utilisateurs extérieurs de la classe interagissent avec elle via ses méthodes, mais ne peuvent pas accéder directement à l'état des classes. Ainsi, la classe fait abstraction des détails d'implémentation liés à son état.

L'abstraction est un terme plus générique, elle peut également être réalisée (entre autres) par sous-classement. Par exemple, l'interface Listdans la bibliothèque standard est une abstraction pour une séquence d'éléments, indexée par leur position, des exemples concrets de a Listsont un ArrayListou un LinkedList. Code qui interagit avec un Listrésumé sur le détail du type de liste qu'il utilise.

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.

Martin Probst
la source
8
L'encapsulation signifie qu'un groupe de propriétés, méthodes et autres membres associés est traité comme une seule unité ou objet. msdn.microsoft.com/en-us/library/dd460654.aspx
raberana
1
L'encapsulation mène à l'abstraction.
Martin
124

L'abstraction est le concept de décrire quelque chose en termes plus simples, c'est-à-dire d'abstraction des détails, afin de se concentrer sur ce qui est important (cela se voit également dans l'art abstrait, par exemple, où l'artiste se concentre sur les éléments constitutifs des images, tels que couleur ou formes). La même idée se traduit en POO en utilisant une hiérarchie d'héritage, où des concepts plus abstraits sont en haut et des idées plus concrètes, en bas, s'appuient sur leurs abstractions. À son niveau le plus abstrait, il n'y a aucun détail d'implémentation et peut-être très peu de points communs, qui sont ajoutés à mesure que l'abstraction diminue.

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

L'encapsulation est une technique . Cela peut ou non ê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, une bonne pratique de la POO exige qu'elles soient regroupées par abstraction. Cependant, il existe d'autres utilisations qui contribuent simplement à la maintenabilité, etc.

Robert
la source
13
Votre définition de l'abstraction est la meilleure que j'aie jamais vue, et j'ai l'impression que pour la toute première fois, elle a en fait cliqué dans ma tête et avait du sens. Je sais que cela fait plus de 3 ans que vous avez publié ceci, mais merci.
Casey Crookston
1
Wow ... Abstraction ... exprimée en termes d'art ... le rouge peut être de la colère, c'est tout ce que nous avions besoin de savoir! Merci pour cette vue du concept :-)
SlowLearner
L'encapsulation est utilisée pour obtenir un «couplage lâche et une cohésion élevée».
Trieur
28

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

Ce sont des concepts différents.

  • L'abstraction est le processus qui consiste à affiner tous les attributs inutiles / sans importance d'un objet et à ne conserver que les caractéristiques les mieux adaptées à votre domaine.

    Par exemple pour une personne: vous décidez de conserver le prénom, le nom et le SSN. L'âge, la taille, le poids, etc. sont ignorés comme non pertinents.

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

  • L'encapsulation est l'étape suivante où 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 que les données et les méthodes sont regroupées.
Cratyle
la source
Pouvons-nous dire que l'abstraction est une sorte de concept de conception et que l'encapsulation concerne principalement la mise en œuvre de la conception sur laquelle nous nous sommes mis d'accord lors de l'abstraction?
M Sach
1
Dans l'encapsulation, vous définissez des opérations qui peuvent / doivent être appliquées à vos données.Cela peut également faire partie de la conception.Eg récupérer le SSN, mais pas le modifier
Cratylus
25

L'encapsulation cache des données inutiles dans une capsule ou une unité

L'abstraction montre la caractéristique essentielle d'un objet

L'encapsulation est utilisée pour masquer son membre de l'extérieur de la classe et de l'interface.Utilisation des modificateurs d'accès fournis dans c # .comme public, privé, protégé, etc. exemple:

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);
  }
}

Ici, nous avons des données d'emballage dans une unité ou une capsule, c'est-à-dire Classe.

L'abstraction est juste à l'opposé de l'encapsulation.

L'abstraction est utilisée pour montrer des données importantes et pertinentes à l'utilisateur. meilleur exemple du monde réel Dans un téléphone mobile, vous voyez leurs différents types de fonctionnalités comme appareil photo, lecteur mp3, fonction d'appel, fonction d'enregistrement, multimédia, etc. C'est une abstraction, car 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();

    }
Varsha
la source
je suis d'accord. ces types sont en quelque sorte opposés. good oop tend à faire abstraction des choses qui ne changent pas et à [encapsuler les choses qui changent] [1]. [1]: principes-wiki.net/...
Ray Tayek
15

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: "l'acte 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 - l'assemblage exprime les détails essentiels et la structure du code machine, mais vous évite d'avoir à penser aux opcodes utilisés, à la disposition du code en mémoire, à faire des sauts 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 d'assemblage. La pile TCP / IP intégrée à votre système d'exploitation fait abstraction des détails de la transmission de bits sur un réseau. Si vous allez jusqu'au silicium brut, les personnes qui ont conçu votre CPU l'ont fait en utilisant des schémas de circuit écrits en termes de «diodes» et de «transistors», qui sont des abstractions de la façon dont les électrons voyagent à travers 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 par nécessité nos modèles font toujours abstraction de certains détails de la «chose réelle». Nous construisons couche sur couche sur couche d'abstractions, car c'est la seule façon de faire quoi que ce soit. (Imaginez que vous essayiez de fabriquer, par exemple, un solveur de sudoku, et que vous deviez le concevoir en utilisant uniquement des cristaux semi-conducteurs. "OK, j'ai besoin d'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 en ont déjà donné de bonnes définitions.

Alex D
la source
14

Répondre à ma propre question après 5 ans car je pense qu'il a encore besoin de plus de détails

Abstraction:

Définition technique: - L' abstraction est un concept pour cacher les détails inutiles (complexes ou simples) et ne montrer que les caractéristiques essentielles de l'objet. Il n'y a pas d'implémentation ici, c'est juste un concept

Ce que cela signifie pratiquement: - Quand je dis que mon entreprise a besoin d'un support / appareil pour que les employés puissent se connecter au client. Il s'agit de la forme la plus pure d'abstaction (comme l'interface en java) car cet appareil / support peut être un téléphone ou Internet ou skype ou en personne ou par e-mail, etc.

Même lorsque je dis que mon entreprise a besoin d'un support / appareil pour que les employés puissent se connecter au client via un appel vocal. Ensuite, je parle aussi abstrait mais à un niveau un peu inférieur car le périphérique / support peut être un téléphone ou un 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 via un appel vocal. Ensuite, je parle aussi abstrait mais à un niveau un peu plus bas, car le téléphone peut être de n'importe quelle entreprise comme iPhone, Samsung ou Nokia, etc.

Encapsulation: - Il s'agit essentiellement de masquer l'état (les informations) de l'objet à l'aide de modificateurs tels que privé, public, protégé, etc.

Ce que cela signifie pratiquement: - Maintenant, quand je dis que mon entreprise a besoin d'un iPhone pour que les employés puissent se connecter au client via un appel vocal, je parle maintenant d'un objet concret (comme un iPhone). Même si je n'entre pas dans les détails de l'iphone ici aussi, mais l'iphone a des informations d'état / concrètes / une implémentation qui lui sont associées là où le périphérique / support n'a pas. Quand je dis objet concret, cela signifie en fait tout objet qui a une implémentation / information (pas complète comme la classe abstraite Java) qui lui est associée.

Donc, l'iphone a en fait utilisé ici l'encapsulation comme stratégie pour cacher son état / ses informations et n'exposer que celles qu'il pense devoir être exposées. Ainsi, l'abstraction et l'encapsulation cachent des détails inutiles mais l'abstraction au niveau du concept et l'encapsulation au niveau de la mise en œuvre

Ceci est l'essentiel basé sur les réponses dans cet article et ci-dessous

  1. différence entre abstraction et encapsulation?
  2. encapsulation vs abstraction exemple du monde réel
M Sach
la source
5

Encapsulation - le processus de masquage des composants de la classe pour empêcher l'accès direct de l'extérieur. Il est réalisé en utilisant le modificateur "privé" pour empêcher l'accès direct à certains membres de la classe (champ de données ou méthode) à partir d'autres classes ou objets tout en fournissant l'accès à ces membres privés par des membres publics (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 POO qui dit "vous ne devez inclure dans la classe que les composants qui sont intéressants dans la tâche du programme". Par exemple: l'objet étudiant a beaucoup de caractères en tant qu'être humain: nom, âge, poids, couleur des cheveux, couleur des yeux, etc. Mais, lorsque vous créez une classe en POO pour travailler avec des étudiants, vous ne devez inclure que les caractères qui matière pour la base de données des étudiants: nom, âge, spécialité, niveau, notes ... etc. en C ++ vous pouvez créer une classe abstraite en utilisant le modificateur "virtual" avec n'importe quelle méthode de la classe et cela la rendra inutilisable en direct mais vous pouvez dérivez-en d'autres classes et créez une implémentation pour ses membres en ajoutant les membres requis en fonction de la tâche.

rouge
la source
4

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 stocker certaines méthodes pour changer cet état, c'est-à-dire qu'ils encapsulent l' état et ses méthodes.

Elle (classe) ne se soucie pas de la visibilité de sa propre ou de son contenu. Si nous choisissons de masquer l'état ou certaines méthodes, ce sont des informations qui se cachent .

Maintenant, prenons le scénario d'un héritage . Nous avons une classe de base et quelques classes dérivées (héritées). Alors, que fait la classe de base ici? Il fait abstraction de 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 :)

Abhilash
la source
3

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

L'encapsulation limite l'accès extérieur aux parties de quelque chose et regroupe l'état de cette chose avec les procédures qui utilisent l'état.


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

Shaun Luttin
la source
1

REMARQUE: je partage ceci. Cela ne veut pas dire que ce n'est pas une bonne réponse mais parce que j'ai facilement compris.

Répondre:

Lorsqu'une classe est conceptualisée, quelles sont les propriétés que nous pouvons y 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 comme animalType pour décrire 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 qui sera une overdose? Ensuite, nous avons coupé certaines informations de la classe. Ce processus applique l'abstraction.

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

Allez ici pour plus d'explications sur ce sujet.

Yubaraj
la source
1

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 l'abstraction n'est pas là, vous pouvez dire que l'objet est moins utilisé. Vous ne pouvez pas identifier l'objet ni accéder à ses fonctionnalités. Prenons l'exemple d'un téléviseur, si vous n'avez pas la possibilité d'allumer, de changer de chaîne, d'augmenter ou de diminuer le volume, etc., à quoi sert le téléviseur et comment l'utilisez-vous?

Si l'encapsulation n'est pas là ou n'est pas mise en œuvre correctement, vous risquez de mal utiliser l'objet. Là, les données / composants peuvent être mal utilisés. Prenons le même exemple de TV, s'il n'y a pas d'encapsulation faite au volume de la TV, alors le contrôleur de volume peut être mal utilisé en le faisant descendre ou dépasser sa limite (0-40 / 50).

satya
la source
1

L'encapsulation protège pour réduire le comportement interne de l'objet / de l'instance d'une entité externe. Ainsi, un contrôle doit être fourni pour confirmer que les données fournies ne vont pas nuire au système interne d'instance / objet pour survivre à son existence.

Bon exemple, Divider est une classe qui a deux dividendes et diviseurs variables d'instance 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 pourrait être protégé en lançant une exception via une méthode.

Ranjit Kumar
la source
0

en une phrase simple, je peux dire: L'essence de l'abstraction est d'extraire des propriétés essentielles tout en omettant les détails inutiles. Mais pourquoi devrions-nous omettre des détails non essentiels? Le principal facteur de motivation est de prévenir le risque de changement. Vous pourriez considérer que l'abstraction est identique à l'encapsulation. Mais l'encapsulation signifie le fait d'enfermer un ou plusieurs éléments dans un conteneur, et non de cacher des détails. Si vous faites valoir que «tout ce qui était encapsulé était également caché». Ce n'est évidemment pas vrai. Par exemple, même si les informations peuvent être encapsulées dans des structures d'enregistrement et des tableaux, ces informations ne sont généralement pas masquées (à moins qu'elles ne soient masquées via un autre mécanisme).

Alireza Rahmani Khalili
la source