Un moyen simple de comprendre l’encapsulation et l’abstraction

Apprendre les concepts de POO particulièrement intéressés à comprendre en profondeur l’abstraction et l’encapsulation.

Vérifié le ci-dessous déjà

Abstraction VS Information masquant VS Encapsulation

différence entre abstraction et encapsulation?

J’ai trouvé très difficile de comprendre ces concepts sans un exemple réel et simple d’extrait de classe / code.

Un de mes collègues a déclaré que l’abstraction n’est rien mais que la création d’une classe abstraite et d’une classe normale qui protège sa variable membre avec la scope est appelée Encapsulation.

Existe-t-il un moyen simple de comprendre et d’aider les autres à comprendre ce qu’ils sont exactement, plutôt que de répéter ce qui suit?

L’abstraction et l’encapsulation sont des concepts complémentaires: l’abstraction se concentre sur le comportement observable d’un object … l’encapsulation se concentre sur l’implémentation de ce comportement … l’encapsulation est le plus souvent obtenue par la dissimulation d’informations les secrets d’object qui ne consortingbuent pas à ses caractéristiques essentielles.

L’abstraction est un processus par lequel vous affichez uniquement les données «pertinentes» et «masquez» les détails inutiles d’un object auprès de l’utilisateur. Considérez votre téléphone portable, vous avez juste besoin de savoir quels boutons doivent être pressés pour envoyer un message ou faire un appel. Que se passe-t-il lorsque vous appuyez sur un bouton, comment vos messages sont envoyés? utilisateur.

L’encapsulation est le processus de combinaison de données et de fonctions en une seule unité appelée classe. Dans l’encapsulation, les données ne sont pas directement accessibles; il est accessible via les fonctions présentes dans la classe. En termes plus simples, les atsortingbuts de la classe sont gardés privés et les méthodes de lecture et de définition publiques sont utilisées pour manipuler ces atsortingbuts. Ainsi, l’encapsulation rend possible le concept de dissimulation de données.

entrer la description de l'image ici

L’abstraction cache les informations ou ne fournit que les détails nécessaires au client.

Par exemple, les freins de voiture – Vous savez simplement que le fait d’appuyer sur les pédales arrête le véhicule, mais vous n’avez pas besoin de savoir comment cela fonctionne en interne.

L’avantage de l’abstraction Demain, si la mise en œuvre des freins passe du frein à tambour au frein à disque, en tant que client, vous n’avez pas besoin de changer (votre code ne changera pas)

L’encapsulation lie les données et les comportements ensemble dans une seule unité. Il s’agit également d’un mécanisme de langage permettant de restreindre l’access à certains composants (cela peut être réalisé par des modificateurs d’access tels que privés, protégés, etc.).

Par exemple, la classe a des atsortingbuts (c.-à-d. Des données) et des comportements (c.-à-d. Des méthodes qui fonctionnent sur ces données)

Un exemple utilisant C #

 //abstraction - exposing only the relevant behavior public interface IMakeFire { void LightFire(); } //encapsulation - hiding things that the rest of the world doesn't need to see public class Caveman: IMakeFire { //exposed information public ssortingng Name {get;set;} // exposed but unchangeable information public byte Age {get; private set;} //internal ie hidden object detail. This can be changed freely, the outside world // doesn't know about it private bool CanMakeFire() { return Age >7; } //implementation of a relevant feature public void LightFire() { if (!CanMakeFire()) { throw new UnableToLightFireException("Too young"); } GatherWood(); GetFireStone(); //light the fire } private GatherWood() {}; private GetFireStone(); } public class PersonWithMatch:IMakeFire { //implementation } 

Tout homme des cavernes peut faire un feu, car il implémente la «fonctionnalité» IMakeFire . Avoir un groupe de fabricants de feux (Liste), cela signifie que Caveman et PersonWithMatch sont des choix valides.

Cela signifie que

  //this method (and class) isn't coupled to a Caveman or a PersonWithMatch // it can work with ANY object implementing IMakeFire public void FireStarter(IMakeFire starter) { starter.LightFire(); } 

Vous pouvez donc avoir beaucoup d’implémenteurs avec beaucoup de détails (propriétés) et de comportement (méthodes), mais dans ce scénario, ce qui compte c’est leur capacité à faire du feu. C’est de l’ abstraction.

Etant donné que faire un feu nécessite certaines étapes (GetWood, etc.), celles-ci sont masquées car elles constituent une préoccupation interne de la classe. L’homme des cavernes a beaucoup d’autres comportements publics qui peuvent être appelés par le monde extérieur. Mais certains détails seront toujours cachés car ils sont liés au travail interne. Ils sont privés et n’existent que pour l’object, ils ne sont jamais exposés. C’est de l’ encapsulation

L’abstraction est un terme généralisé. En d’autres termes, l’encapsulation est un sous-ensemble de l’abstraction.

Abstraction est une méthodologie puissante pour gérer des systèmes complexes. L’abstraction est gérée par des objects bien définis et leur classification hiérarchique.

Par exemple, une voiture en elle-même est un object bien défini, composé de plusieurs autres objects plus petits, tels qu’un système d’engrenage, un mécanisme de direction, un moteur, qui ont eux aussi leurs propres sous-systèmes. Mais pour les humains, la voiture est un object unique, qui peut être géré à l’aide de ses sous-systèmes, même si leurs détails internes sont inconnus. Courtoisie


Encapsulation: Le regroupement d’un membre et d’une méthode de données en une seule unité (par exemple, une classe) est appelé Encapsulation.

L’encapsulation est comme enfermer dans une capsule. Cela englobe les opérations associées et les données liées à un object dans cet object.

L’encapsulation est comme votre sac dans lequel vous pouvez garder votre stylo, votre livre, etc. Cela signifie que c’est la propriété d’encapsuler les membres et les fonctions.

 class Bag{ book; pen; ReadBook(); } 

Encapsulation signifie cacher les détails internes d’un object, c’est-à-dire comment un object fait quelque chose.

L’encapsulation empêche les clients de voir leur vue interne, où le comportement de l’abstraction est implémenté.

L’encapsulation est une technique utilisée pour protéger les informations contenues dans un object de l’autre object.

Masquer les données pour la sécurité, par exemple en rendant les variables privées, et exposez la propriété pour accéder aux données privées qui seraient publiques.

Ainsi, lorsque vous accédez à la propriété, vous pouvez valider les données et les définir. Courtoisie

L’abstraction est le processus par lequel vous «jetez» les détails inutiles d’une entité que vous prévoyez de capturer / représenter dans votre conception et ne conservez que les propriétés de l’entité pertinentes pour votre domaine.
Exemple: pour représenter une voiture, vous devez conserver par exemple le modèle et le prix, l’emplacement actuel et la vitesse actuelle et ignorer la couleur et le nombre de sièges, etc.

L’encapsulation est la “liaison” des propriétés et des opérations qui les manipulent dans une seule unité d’abstraction (à savoir une classe).
La voiture aurait donc un stop rapide qui manipulerait la position et la vitesse actuelle, etc.

Eh bien, je vais expliquer l’abstraction avec un exemple du monde réel. Disons que dans votre maison, vous avez une prise élecsortingque et que de nombreux appareils peuvent se connecter à la même prise, mais la fiche n’a jamais une idée du périphérique auquel elle est connectée, c’est-à-dire que les

Pensez-vous si nous connectons un appareil directement au fil élecsortingque sans prise? Disons connecter une ampoule directement à un fil, puis le fil sait quel appareil il est connecté et quand nous avons besoin de remplacer l’ampoule, nous devons retirer le fil de l’ampoule, ce qui signifie que l’ampoule est étroitement couplée au fil. En d’autres termes, l’ampoule et le fil connaissent les détails auxquels ils sont connectés, c’est-à-dire non abstraits.

Dans le monde orienté object, l’abstraction fonctionne exactement de la même manière. La classe qui utilise d’autres fonctions / propriétés de classes n’a pas besoin de savoir quelles classes fonction / propriété elle consum et tout devrait être résumé avec une classe d’interface / abstract.

Laissez-moi coder le même exemple. J’ai ici une classe “ElecsortingcPlug”, qui exécute un périphérique. Mais la classe “ElecsortingcPlug” n’a aucune idée du périphérique qu’elle exécute. Il peut s’agir de n’importe quelle classe implémentant l’interface “IDevice”, ce qui signifie que l’implémentation de “RunDevice” est extraite de “ElecsortingcPlug”. Voici l’exemple de code complet,

 class Program { static void Main(ssortingng[] args) { ElecsortingcPlug elecsortingcPlug = new ElecsortingcPlug(new Bulb()); } } public class ElecsortingcPlug { private readonly IDevice _device; public ElecsortingcPlug(IDevice device) { _device = device; } public void Run() { _device.Rundevice(); } } public interface IDevice { void Rundevice(); } public class Bulb : IDevice { public void Rundevice() { Console.WriteLine("Switched on bulb"); } } 

L’encapsulation est ce que cela ressemble, une façon de placer une boîte autour de quelque chose pour protéger son contenu. L’abstraction consiste à extraire les propriétés fonctionnelles de quelque chose de telle que vous pouvez effectuer des opérations en utilisant uniquement ce que vous avez extrait sans connaître le fonctionnement interne.

Lorsque nous disons que deux substances sont des liquides, nous utilisons le terme “liquide” comme une abstraction des propriétés des substances que nous choisissons de discuter. Cette abstraction nous indique ce que nous pouvons faire avec les substances, compte tenu de notre expérience antérieure avec les liquides.

L’abstraction n’a pas non plus de rapport avec les hiérarchies. Vous pouvez avoir une autre abstraction comme “métaux” qui extrait les propriétés des substances de manière différente.

Les abstractions oublient les détails, donc si vous utilisez une abstraction particulière, vous ne devriez pas poser de questions sur les propriétés de la substance sous-jacente qui ne sont pas accordées par l’abstraction. Comme si vous prenez du lait et de l’eau et que vous les mélangez, vous avez alors du mal à demander combien de lait vous avez.

Un foncteur est une abstraction par rapport à quelque chose qui a une notion de carte, c’est-à-dire que vous pouvez exécuter une fonction sur son contenu interne qui transforme le bit interne en toute autre chose. L’extérieur rest le même genre de chose.

Là où cela devient utile, c’est que si vous avez une fonction qui fonctionne sur les listes et que vous réalisez que vous ne dépendez que de l’interface, vous pouvez plutôt utiliser Functor et votre fonction peut fonctionner avec des stream, promesses, maybes, tuples et tout ce qui partage cette abstraction.

Les langages fonctionnels tels que Haskell ont de très grands pouvoirs d’abstraction qui rendent pratique la réutilisation de code extrême.

abstraction de données: l’access aux données membres et aux fonctions membres de n’importe quelle classe est simplement appelé abstraction de données …..

encapsulation: les variables de liaison et les fonctions ou 1 peuvent dire des membres de données ou des fonctions membres tout ensemble dans une seule unité est appelé en tant qu’encapsulation de données ….

L’encapsulation peut être considérée comme un papier d’emballage utilisé pour lier des données et fonctionner ensemble comme une seule unité qui le protège de toutes sortes de saletés externes (je veux dire des fonctions externes).

L’abstraction implique l’absence de détails et l’utilisation d’une interface simple pour contrôler un système complexe.

Par exemple, on peut allumer une ampoule en appuyant sur un bouton sans se soucier de l’ingénierie élecsortingque sous-jacente (Abstraction).

Cependant, vous ne pouvez pas allumer l’ampoule autrement. (Encapsulation)

L’abstraction est comme utiliser un ordinateur.

Vous n’avez absolument aucune idée de ce qui se passe au-delà de ce que vous voyez avec l’interface graphique et le matériel externe (par exemple l’écran). Toutes ces jolies couleurs et autres. Vous êtes uniquement présenté les détails pertinents pour vous en tant que consommateur générique.

L’encapsulation est l’acte réel de cacher les détails non pertinents .

Vous utilisez votre ordinateur, mais vous ne voyez pas à quoi ressemble son processeur (unité centrale de traitement) (sauf si vous essayez d’y pénétrer). Il est caché (ou encapsulé) derrière tout ce chrome et ce plastique.

Dans le contexte des langages de programmation orientée object (OOP), vous avez généralement ce type de configuration:

 CLASS { METHOD { *the actual code* } } 

Un exemple de “encapsulation” serait d’avoir une MÉTHODE que l’utilisateur normal ne peut pas voir (privé). “Abstraction” est l’utilisateur habituel utilisant la MÉTHODE qu’ils peuvent (public) pour utiliser le privé.

 public abstract class Draw { public abstract void drawShape(); // this is abstraction. Implementation detail need not to be known. // so we are providing only necessary detail by giving drawShape(); No implementation. Subclass will give detail. private int type; // this variable cannot be set outside of the class. Because it is private. // Binding private instance variable with public setter/getter method is encapsulation public int getType() { return type; } public void setType(int type) { // this is encapsulation. Protecting any value to be set. if (type >= 0 && type <= 3) { this.type = type; } else { System.out.println("We have four types only. Enter value between 0 to 4"); try { throw new MyInvalidValueSetException(); } catch (MyInvalidValueSetException e) { e.printStackTrace(); } } } } 

Abstraction est liée aux méthodes où les détails de la mise en œuvre ne sont pas connus, ce qui constitue une sorte de masquage de l'implémentation.
Encapsulation est liée à la liaison de variables d'instance avec la méthode, une sorte de masquage de données.

Abstraction de données : DA filtre simplement l’élément concret. Par la classe, nous pouvons réaliser l’abstraction pure, car avant de créer la classe, nous ne pouvons penser qu’aux informations concernées sur la classe.

Encapsulation : C’est un mécanisme par lequel nous protégeons nos données de l’extérieur.