Je lis "Concurrence Java dans la pratique" et il est dit: "Heureusement, les mêmes techniques orientées objet qui vous aident à écrire des classes bien organisées et maintenables - telles que l'encapsulation et le masquage des données - peuvent également vous aider à créer des thread-safe Des classes."
Le problème # 1 - Je n'ai jamais entendu parler de la dissimulation de données et je ne sais pas ce que c'est.
Le problème # 2 - J'ai toujours pensé que l'encapsulation utilise le privé contre le public, et est en fait la dissimulation des données.
Pouvez-vous expliquer ce qu'est la dissimulation de données et en quoi elle diffère de l'encapsulation?
java
design
object-oriented
dhblah
la source
la source
Réponses:
La dissimulation de données et d'informations est une notion plus large, que l'on retrouve en informatique et en génie logiciel. Il fait référence au fait que les parties d'un programme informatique qui peuvent changer ne doivent pas être accessibles à partir d'autres modules / des clients.
L'encapsulation est un terme qui se trouve dans le paradigme orienté objet et fait référence à la conservation des données dans des champs privés et à leur modification uniquement par des méthodes.
Ainsi, l' encapsulation peut être considérée comme un moyen de masquer les données dans des systèmes orientés objet .
la source
L'encapsulation et le masquage des données sont des termes liés. Il est important de comprendre qu'ils surviennent en relation avec l' abstraction . Booch et. Al. en analyse et conception orientées objet avec applications explique,
la source
La création d'une classe inclut le concept d'encapsulation. Lorsque vous créez une classe, vous mettez des données et des comportements à l'intérieur de la classe et la classe devient une unité que nous appelons un objet. Le masquage des données fait donc partie de l'encapsulation.
la source
De Wikipédia :
la source
Ils sont souvent utilisés de manière interchangeable dans les discussions, et je pense souvent qu'ils travaillent ensemble pour atteindre le même objectif, et bien que les éléments suivants ne soient pas tout à fait exacts, ils peuvent fournir une distinction significative, si une distinction doit être faite:
Lorsque l'on parle d'encapsulation, elle est souvent mise en œuvre comme un mécanisme procédural / fonctionnel. Il existe un certain type de garde pour l'état sous-jacent, et l'accès via la garde nécessite que certains protocoles soient suivis pour avoir accès (lire ou modifier l'état souhaité). L'encapsulation offre également la possibilité d'effets secondaires dus à l'accès (comme un changement d'état en cascade, ou la notification / le déclenchement d'un événement / l'émission d'un signal lorsque la chose d'intérêt est lue ou modifiée) afin que des actions de suivi puissent être lancées. Encore une fois, je pense souvent à l'encapsulation comme un concept qui est mis en œuvre comme une procédure.
Je vois que le concept de masquage des données a un objectif similaire à celui de l'encapsulation; cependant, le mécanisme est structurel et fonctionne à un niveau différent. Dans la pratique, au lieu de fournir un mécanisme de garde et d'effets secondaires via la procédure, l'état est protégé et affecté par les mécanismes structurels du langage et de l'exécution. Ces types de gardes seraient des clauses de visibilité, des définitions de type, l'héritage et similaires. Les effets secondaires que vous pouvez exploiter à partir des objets structurellement protégés sont à nouveau quelque chose qui dépend du langage et de l'exécution: peut-être l'activation des objets, le nombre de références ou quelque chose dans ce sens.
la source
Ils sont souvent, peut-être généralement, utilisés de manière interchangeable. Mais notez que la citation de Booch ci-dessus dit: "L'encapsulation est le plus souvent réalisée par la dissimulation d'informations ..." c'est-à-dire le plus souvent, mais pas toujours dans tous les cas.
Notez que Python permet de remonter les données dans les classes, mais n'autorise pas les variables privées. On pourrait donc dire que Python fournit l'encapsulation sans cacher les données.
Vous pourriez faire la même chose en Java en créant toutes vos variables membres
public
, mais en plus de donner à tout le monde une crise cardiaque, vous perdriez l'avantage de masquer les données ... c'est-à-dire en préservant la sémantique d'un objet en restreignant l'accès à son état.la source
Dans OO, l' encapsulation est l'endroit où les informations sont conservées dans un objet. Par exemple, a
Person
aname
et les clients de Person (c'est-à-dire vous) savent que Person possède un nom, soit via des champs publics, soit via des méthodes d'accesseur. Et, espérons-le, vous n'avez pas besoin de conserver également les noms dans un tableau global de noms, etc. C'est donc une grande étape pour éviter le code spaghetti ingérable. Mais le client doit encore savoir quelque chose sur la façon dont Person gère les noms: par exemple, espace ou virgule délimitée?Le masquage de données est l'endroit où
Person
a un champ de nom, mais, au moins en théorie, personne ne le sait . Le champ est privé, sans méthode d'accesseur public. Les clients peuvent transmettre un nom à partir d'un enregistrement de base de données, XML, HTTP POST, peu importe, mais le fonctionnement interne de la façon dont Person gère le nom est une «boîte noire». Les futures implémentations de Person sont libres de changer, par exemple, pour passer à avoir unfirstName
et unlastName
.Dans un monde idéal, le masquage de données est supérieur à l'encapsulation, mais tous les mondes ne sont pas idéaux. :-)
la source