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
, public
cache é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
An '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.
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.Réponses:
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
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 aList
sont unArrayList
ou unLinkedList
. Code qui interagit avec unList
ré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.
la source
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.
la source
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.
C'est-à-dire que les données et les méthodes sont regroupées.
la source
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:
Ici, nous avons des données d'emballage dans une unité ou une capsule, c'est-à-dire Classe.
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.
la source
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.
la source
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
la source
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.
la source
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 :)
la source
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.
la source
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.
la source
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).
la source
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.
la source
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).
la source