135 votes

Encapsulation ou abstraction ?

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

L'abstraction :

Le processus d'abstraction en Java est utilisé pour cacher certains détails et ne montrer que les caractéristiques essentielles de l'objet. En d'autres termes, il s'agit de la vue extérieure d'un objet (interface). Le seul bon exemple que je vois à travers différents sites est interface.

Encapsulation :

Il s'agit essentiellement de cacher l'état de l'objet avec l'aide de modificateurs comme private, public, protected etc. Nous exposons l'état à travers des méthodes méthodes publiques uniquement si nécessaire.

Ce que nous obtenons 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, d'après l'explication ci-dessus, il semble que l'encapsulation soit une partie de l'abstraction ou nous pouvons dire que c'est un sous-ensemble de l'abstraction. Mais pourquoi alors le terme encapsulation est inventé alors que nous pourrions le traiter avec l'abstraction seulement ? 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 déjà été soulevée sur ce forum, je la pose à nouveau avec des doutes spécifiques. Certaines réponses disent é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 basé sur les réponses de ce post et ceux ci-dessous.

  1. différence entre abstraction et encapsulation ?
  2. encapsulation vs abstraction : exemple du monde réel

121voto

Robert Points 3044

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

Par exemple, au sommet, il peut y avoir une interface avec une seule méthode, puis le niveau suivant, fournit plusieurs classes abstraites, qui peuvent ou non remplir certains des détails du niveau supérieur, mais qui se ramifient en ajoutant leurs propres méthodes abstraites, puis pour chacune de ces classes abstraites, il y a des classes concrètes fournissant des implémentations de toutes les méthodes restantes.

Encapsulation est un technique . Il peut s'agir ou non d'une aide à l'abstraction, mais il s'agit certainement de cacher des informations et/ou de les organiser. Elle 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 aident simplement à la maintenabilité, etc.

98voto

Martin Probst Points 3875

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 par le biais de ses méthodes, mais ne peuvent pas accéder directement à l'état de la classe. Ainsi, la classe résumés éloigne les détails de mise en œuvre liés à son état.

Abstraction est un terme plus générique, elle peut également être obtenue par (entre autres) la sous-classification. Par exemple, l'interface List dans la bibliothèque standard est une abstraction pour une séquence d'éléments, indexés par leur position, des exemples concrets d'une List sont un ArrayList o un LinkedList . Le code qui interagit avec un List fait abstraction des détails concernant le type de liste qu'il utilise.

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

28voto

Cratylus Points 21838

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

Ce sont des concepts différents.

  • L'abstraction est le processus qui consiste à supprimer tous les attributs inutiles/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 le nom, le prénom et le SSN. L'âge, la taille, le poids, etc. sont ignorés car non pertinents.

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

  • L'encapsulation est l'étape suivante où il reconnaît les opérations appropriées sur les attributs que vous avez accepté de conserver au cours du processus d'abstraction. Il s'agit de 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.

14voto

Alex D Points 14591

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'action de considérer quelque chose comme une qualité ou une caractéristique générale, en dehors des réalités concrètes, des objets spécifiques ou des instances réelles".

Le langage assembleur peut être considéré comme une abstraction du code machine -- l'assembleur 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, aux 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 des bits sur un réseau. Si vous descendez 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 se déplacent 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 par nécessité, nos modèles font toujours abstraction de certains détails de la "vraie chose". Nous construisons couche après couche après couche d'abstractions, car c'est la seule façon d'arriver à quelque chose. (Imaginez que vous essayiez de fabriquer, disons, un ré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, l'"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.

4voto

abhilash Points 33

C'est ainsi que je l'ai compris :

Dans la programmation orientée objet, nous avons quelque chose appelé classes . A quoi servent-ils ? Ils servent à stocker un certain état et à stocker certaines méthodes permettant de modifier cet état, c'est-à-dire qu'il s'agit de encapsulant et ses méthodes.

La classe ne se soucie pas de la visibilité de sa propre classe ou de son contenu. Si nous choisir de cacher l'État ou certaines méthodes, il est dissimulation d'informations .

Maintenant, prenez 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 ? Elle est abstraction de certaines choses dans les classes dérivées.

Ils sont tous différents, non ? Mais, nous les mélangeons pour écrire de bons programmes orientés objet. J'espère que cela vous aidera :)

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