Abstraction VS masquage de L'Information VS Encapsulation
pouvez-vous me dire quelle est la différence entre abstraction et masquage d'information dans le développement de logiciels?
je suis confus. L'Abstraction cache la mise en œuvre détaillée et informations cachant des résumés des détails entiers de quelque chose.
Update: j'ai trouvé une bonne réponse pour ces trois concepts. voir la réponse séparée sous pour plusieurs citations tirées de il .
19 réponses
allez à la source! Grady Booch dit (dans l'Analyse Orientée Objet et des Design, page 49, deuxième édition):
Abstraction et encapsulation sont des concepts complémentaires: abstraction se concentre sur les comportements observables d'un objet... encapsulation se concentre sur la mise en œuvre qui donne lieu à ce comportement... l'encapsulation s'effectue le plus souvent par dissimulation d'informations, ce qui est le processus de cacher tous les secrets de l'objet qui ne sont pas contribuer à ses caractéristiques essentielles.
en d'autres termes: abstraction = l'objet extérieurement; encapsulation (réalisée par masquage de l'information) = l'objet intérieurement,
exemple:
Dans le Framework .NET, la classe System.Text.StringBuilder
fournit une abstraction au-dessus d'un tampon de chaîne. Cette abstraction de tampon vous permet de travailler avec le tampon sans égard pour son implémentation. Ainsi, vous êtes en mesure d'ajouter des chaînes à la buffer sans égard pour la façon dont le StringBuilder
garde en interne la trace de choses telles que le pointeur vers le buffer et la gestion de la mémoire quand le buffer est plein (ce qu'il fait avec encapsulation via masquage d'informations).
rp
l'OP a mis à jour sa question avec plusieurs citations qu'il avait trouvées, notamment dans un article d'Edward V. Berard intitulé," Abstraction, Encapsulation, and Information Hiding " . Je suis en train de re-poster une version légèrement étoffée et reformatée de la mise à jour de L'OP, car cela devrait être une réponse en soi.
(toutes les citations sont tirées de l'article mentionné ci-dessus.)
l'Abstraction:
" un point de confusion concernant l'abstraction est son utilisation à la fois comme procédé et comme entité. L'Abstraction, en tant que processus, désigne l'extraction des détails essentiels sur un élément, ou un groupe d'éléments, tout en ignorant les détails essentiels. L'Abstraction, en tant qu'entité, désigne un modèle, une vue ou une autre représentation ciblée d'un élément réel."
Informations Cachées:
" son interface ou sa définition a été choisie pour révéler le moins possible sur son fonctionnement interne." - [Parnas, 1972b]
"l'Abstraction peut être [...] utilisé comme une technique pour identifier les informations qui doivent être cachés."
" il peut y avoir Confusion lorsque les gens ne font pas la distinction entre le fait de cacher des informations, et une technique (par exemple, l'abstraction) qui est utilisée pour aider à identifier l'information qui doit être cachée."
Encapsulation:
"Il [...] se réfère à la construction d'une capsule, dans le cas d'une barrière conceptuelle, autour d'un ensemble de choses." -[Wirfs-Brock et al, 1990]
" en tant que procédé, l'encapsulation signifie l'acte de placer un ou plusieurs articles dans un conteneur [ ... ]. L'Encapsulation, en tant qu'entité, se réfère à un paquet ou à une enveloppe qui contient (contient, entoure) un ou plusieurs articles."
"si l'encapsulation était" la même chose que la dissimulation d'informations", Alors on pourrait faire l'argument que " tout ce qui était encapsulé était également caché."Ce n'est évidemment pas vrai."
Conclusion:
" L'Abstraction, la dissimulation de l'information et l'encapsulation sont des concepts très différents, mais très liés. On pourrait soutenir que l'abstraction est une technique qui nous aide à déterminer quelles informations spécifiques devraient être visibles et quelles informations devraient être cachées. L'Encapsulation est alors la technique d'empaquetage de l'information de manière à masquer ce qui doit être caché et à rendre visible ce qui est censé être visible."
Abstraction
cache les détails de l'implémentation en fournissant une couche au-dessus de la fonctionnalité de base.
Information Hiding
cache les données qui sont affectées par cette mise en œuvre. L'utilisation de private
et public
entre dans cette catégorie. Par exemple, Cacher les variables des classes.
Encapsulation
regroupe simplement toutes les données et fonctions similaires dans un groupe E. g Class
en programmation; Packet
en réseau.
grâce à L'utilisation de Classes, nous mettons en œuvre les trois concepts - Abstraction
, Information Hiding
et Encapsulation
Merci de ne pas compliquer les concepts simples.
Encapsulation : le regroupement des données et des méthodes en une seule unité est L'Encapsulation (p.ex. Classe)
Abstraction : il s'agit d'un acte consistant à représenter uniquement les choses essentielles sans inclure de détails sur l'arrière-plan. (p.ex. Interface)
FOR EXAMPLES AND MORE INFO GOTO:
http://thecodekey.com/C_VB_Codes/Encapsulation.aspx
http://thecodekey.com/C_VB_Codes/Abstraction.aspx
définitions approuvées ici
P. S.: je me souviens aussi de la définition d'un livre nommé C++ par Sumita Arora que nous lisons en 11ème classe ;)
Le sens de l'abstraction donné par le Dictionnaire Oxford English dictionary (OED) les plus proches du sens voulu ici est "L'acte de se séparer de la pensée". Une meilleure définition pourrait être " représenter les caractéristiques essentielles d'une chose sans inclure le contexte ou des détails essentiels.
la dissimulation de L'Information est le principe selon lequel les utilisateurs d'un composant logiciel (tel qu'une classe) ne doivent connaître que les détails essentiels de la façon d'initialiser et d'accéder au composant, et n'ont pas besoin de connaître les détails de la mise en œuvre.
Edit : il me semble que l'abstraction est le processus de décider quelles parties de la mise en œuvre qui devrait être caché .
donc ce n'est pas l'abstraction contre la dissimulation de l'information. C'est de l'information qui se cache par abstraction.
L'Abstraction cache des détails de mise en œuvre comme vous le dites.
vous abstraites quelque chose à un point assez élevé que vous aurez seulement à faire quelque chose de très simple pour effectuer une action.
se cacher de l'Information est de cacher les détails d'implémentation. La programmation est dur. Vous pouvez avoir beaucoup de choses à s'occuper et à manipuler. Il peut y avoir des variables que vous voulez/devez suivre de très près. Cacher des informations garantit que personne accidentellement casse quelque chose en utilisant une variable ou méthode exposée au public.
ces deux concepts sont très étroitement liés dans la programmation orientée objet.
Abstraction
Abstraction est un acte de représenter des détails essentail sans inclure les détails de fond. Une classe abstraite n'a que des signatures de méthode et la classe implementing peut avoir sa propre implémentation, de cette façon les détails complexes seront cachés à l'utilisateur. L'Abstraction se concentre sur la vue extérieure. En d'autres termes, L'Abstraction est une séparation des interfaces de l'implémentation réelle.
Encapsulation
Encapsulation explique la liaison des membres de données et des méthodes en une seule unité. La dissimulation d'informations est le but principal de l'encapsulation. L'Encapsulation est obtenue en utilisant des spécificateurs d'accès comme privé, public, protégé. Les variables des membres de la classe sont rendues privées de sorte qu'elles ne peuvent pas être accessibles directement au monde extérieur. Encapsulation se concentre sur la vue intérieure. En d'autres termes, L'Encapsulation est une technique utilisée pour les informations dans un objet de l'autre objet.
Encapsulation: lier les membres de données et les fonctions de membre ensemble est appelé encapsulation. l'encapsulation se fait par classe. abstraction: Cacher les détails d'implémentation de l'usage ou de la vue est appelé abstraction. ex: int x; nous ne savons pas comment int va travailler à l'interne. mais nous savons que l'int fonctionnera. c'est l'abstraction.
Abstraction - il s'agit du processus d'identification des caractéristiques essentielles d'un objet sans inclure les détails hors de propos et fastidieux.
Encapsulation - il s'agit du processus consistant à enfermer des données et des fonctions manipulant ces données en une seule unité.
d'Abstraction et d'Encapsulation sont liés, mais concepts complémentaires.
-
L'Abstraction est le processus. L'Encapsulation est le mécanisme par lequel L'Abstraction est mise en œuvre.
-
Abstraction se concentre sur le comportement observable d'un objet. Encapsulation se concentre sur la mise en œuvre qui donne lieu à ce comportement.
cacher des informations - c'est le processus de cacher les détails de mise en œuvre d'un objet. C'est un résultat de l'Encapsulation.
Abstraction: L'Abstraction est le concept/la technique utilisé pour identifier ce qui devrait être la vue externe d'un objet. Seulement les interfaces disponibles.
la dissimulation de L'Information: elle est complémentaire de l'Abstraction, car l'Abstraction est réalisée par la dissimulation de l'information. Cachant tout sauf la vue extérieure.
Encapsulation : Est la liaison de données et fonctions connexes dans une unité. Elle facilite L'Abstraction et la dissimulation de l'information. Permettre l'application de fonctionnalités telles que l'accès aux membres sur l'unité pour réaliser L'Abstraction et la dissimulation de L'Information
Voir Joel post sur le Droit des Abstractions qui fuient
fondamentalement, l'Abstraction vous donne la liberté de penser à des concepts de niveau supérieur. Une analogie hors programmation est que la plupart d'entre nous ne savons pas d'où vient notre nourriture, ni comment elle est produite, mais le fait que nous (habituellement) n'avons pas à nous en inquiéter nous libère pour faire d'autres choses, comme la programmation.
comme pour cacher des informations, je suis d'accord avec jamting.
l'Abstraction permet de traiter un processus complexe comme un processus simple. Par exemple, l'abstraction "fichier" standard traite les fichiers comme un tableau contigu d'octets. L'utilisateur / développeur n'a même pas à penser aux questions de clusters et de fragmentation. (L'Abstraction apparaît normalement sous forme de classes ou de sous-programmes.)
la dissimulation d'informations vise à protéger vos abstractions contre les utilisateurs malveillants/incompétents. En limitant le contrôle de certains États (disque dur par exemple) au développeur d'origine, d'énormes quantités de gestion d'erreurs deviennent redondantes. Si personne d'autre que le pilote de système de fichiers ne peut écrire sur le disque dur, alors le pilote de système de fichiers sait exactement ce qui a été écrit sur le disque dur et où. (La manifestation habituelle de ce concept est private
et protected
mots-clés en OO langues.)
pour abstraire quelque chose, nous devons cacher le détail ou cacher le détail de quelque chose que nous devons abstraire. Mais, les deux peuvent être atteints par encapsulation.
ainsi, la dissimulation de l'information est un but, l'abstraction est un processus, et l'encapsulation est une technique.
Abstraction signifie simplement la technique dans laquelle seuls les détails essentiels du logiciel sont rendus visibles à l'utilisateur pour aider l'utilisateur à utiliser ou à opérer avec le Logiciel, ainsi les détails de mise en œuvre de ce Logiciel ne sont pas affichés(sont rendus invisibles). Encapsulation est la technique qui ont un paquet qui contient un ou plusieurs articles et donc certaines des informations (en particulier les détails du programme) sont devenus visibles et certains non visibles pour l'utilisateur, donc l'encapsulation est réalisée par la dissimulation de l'information. En résumé. Abstraction est pour le comportement observable (extérieurement) et l'encapsulation est pour l'invisibilité (intérieurement) mais ces deux sont vraiment complémentaires.
juste ajouter plus de détails autour de InformationHiding , trouvé ce lien est vraiment une bonne source avec des exemples
InformationHiding , c'est l'idée qu'une décision de conception devrait être caché du reste du système afin de prévenir les imprévus de couplage. InformationHiding est un principe de conception. InformationHiding devrait informer de la façon dont vous encapsuler "151920920 des" choses", 151910920" mais bien sûr, il n'a pas à .
Encapsulation est une caractéristique du langage de programmation.
moi aussi j'étais très confus au sujet des deux concepts D'Abstraction et D'Encapsulation. Mais quand j'ai vu le abstraction article sur myjavatrainer.com, il est devenu clair pour moi que L'Abstraction et L'Encapsulation sont des pommes et des Oranges, vous ne pouvez pas vraiment les comparer parce que les deux sont nécessaires.
Encapsulation est la façon dont l'objet est créé, et l'abstraction est la façon dont l'objet est considéré dans le monde extérieur.
après avoir lu toutes les réponses ci-dessus une par une, Je ne peux pas m'empêcher de poster que
abstraction implique l'installation de définir des objets qui représentent abstrait "acteurs" qui peut effectuer des travaux, un rapport et une modification de leur état et de "communiquer" avec d'autres objets dans le système.
Encapsulation est assez clair d'en haut cependant - >
le terme encapsulation se réfère à la dissimulation des détails de l'état, mais l'extension du concept de type de données à partir des langages de programmation plus tôt pour associer le comportement le plus fortement avec les données, et la normalisation de la façon dont les différents types de données interagissent, est le début de l'abstraction.
référence wiki
Encapsulation: données de liaison et les méthodes qui agissent sur elle. cela permet de cacher des données de toutes les autres méthodes dans d'autres classes.
exemple: MyList
classe qui peut ajouter un article, supprimer un élément, puis retirez tous les éléments
les méthodes add
, remove
, et removeAll
agissent sur la liste(un réseau privé) qui ne peut pas être accédé directement de l'extérieur.
Abstraction: cache le non pertinent le comportement et les données. Comment les articles sont stockés, ajoutés ou supprimés est caché (abstrait). Mes données peuvent être tenues dans le tableau simple, ArrayList, LinkedList, et ainsi de suite. En outre, la façon dont les méthodes sont mises en œuvre est cachée de l'extérieur.
Encapsulation-forcer l'accès aux données internes d'une manière contrôlée ou empêcher les membres d'être directement accessibles.
Abstraction-Cacher les détails de mise en œuvre de certaines méthodes est connu sous le nom d'abstraction
comprenons à l'aide d'un exemple: -
class Rectangle
{
private int length;
private int breadth;// see the word private that means they cant be accesed from
outside world.
//now to make them accessed indirectly define getters and setters methods
void setLength(int length)
{
// we are adding this condition to prevent users to make any irrelevent changes
that is why we have made length private so that they should be set according to
certain restrictions
if(length!=0)
{
this.length=length
}
void getLength()
{
return length;
}
// same do for breadth
}
maintenant pour l'abstraction définir une méthode qui ne peut être consultée et l'utilisateur ne sait pas qu'est-ce que le corps de la méthode et comment il est de travail Considérons l'exemple ci-dessus, nous pouvons définir une zone de méthode qui calcule la zone du rectangle.
public int area()
{
return length*breadth;
}
maintenant, chaque fois qu'un utilisateur utilise la méthode ci-dessus, il obtiendra juste la zone pas la façon dont il est calculé. On peut considérer un exemple d'println() la méthode nous savons juste qu'il est utilisé pour l'impression et nous ne savons pas comment il imprime les données. J'ai écrit un blog en détail vous pouvez voir le lien ci-dessous pour plus d'info abstraction vs encapsulation