Encapsulation vs masquage de données-Java

intervieweur: Qu'est-ce que l'encapsulation et comment la réaliser en Java?

Moi: Encapsulation est un mécanisme de cacher des informations de la part du client. Il peut s'agir de données, de mise en œuvre ou d'algorithme. Nous pour ce faire, utilisez des modificateurs d'accès.

intervieweur: il s'agit de cacher des données. Comment réaliser L'encapsulation en Java?

Moi : uummmm

question concrète: autre que "modificateurs D'accès", Quelle est la façon d'implémenter L'Encapsulation en Java?

43
demandé sur Maaz Rehman 2012-08-18 01:31:37

18 réponses

plus généralement encapsulation se réfère simplement au Groupement des données (par exemple d'un objet) avec les opérations sur ces données. Si vous avez une classe encapsulant des données champs , avec le méthodes pour manipuler ces données.

mais l'encapsulation est aussi parfois utilisé de la même manière que votre réponse, et en effet, l'un des points de groupage des données et des méthodes est de Cacher la mise en œuvre.

je suppose qu'une meilleure réponse que juste utiliser des méthodes et rendre tous les champs privés est: utiliser des interfaces. De cette façon, les opérations sur un objet sont purement basées sur le contrat d'interface, et ne sont en aucune façon liées aux champs ou aux méthodes d'aide utilisées pour mettre en œuvre ce contrat en interne.

31
répondu pb2q 2012-08-17 22:00:58

Encapsulation

en général Encapsulation signifie regrouper des articles similaires, aussi simple que cela.

par exemple, prendre un cours Student où nous aurons des élèves variables d'instance et les comportements/méthodes agissant sur ces variables d'instance @ un endroit.

Pourquoi est-ce important? Nous ne voulons pas que notre code soit éparpillé dans notre base de code.

si nous disons que nous devons effectuer des changements, alors nous avons besoin de trouver les variantes(de change) à tous les lieux. En groupant des articles similaires, nous évitons simplement de tels scénarios et cela aide aussi à rendre notre Code groupé plus ciblé.

"151930920 De Données" Cacher

il fournit juste un moyen de protéger vos données du monde extérieur. Ce que ça veut dire, disons que si j'ai rendu ma variable d'instance publique, alors n'importe qui peut changer son état. Mais si nous faisons de notre instance une variable privée / protégée alors en fait, nous interdisons aux entités extérieures d'y apporter des modifications.

Comparaison / Discussion

maintenant la question se pose, sous quel rapport protégeons-nous nos variables?

encore une fois, nous devons comprendre que Encapsulation est juste le conteneur dont nous avons besoin pour placer nos articles similaires.

c'est juste agir comme un boîte Noire monde extérieur. Monde extérieur (Je veux dire clients/consommateurs: en utilisant notre classe Student ) ne connaissent pas les détails internes/détails d'implémentation de la classe Student et en fait ils ne devraient pas se soucier des détails internes/détails d'implémentation de la classe. Ils veulent juste quelques méthodes / API afin qu'ils puissent les utiliser dans leur application client.

donc mon point est tous les comportements/variables liés aux étudiants sont placés dans une boîte noire que nous appelons comme un classe. Maintenant, jusqu'à son concepteur de la classe quels sont les éléments de la classe doit être caché et ce qui ne doit pas être caché du monde extérieur.

revenons maintenant à la question en Java: nous rendons nos variables privées, cela signifie qu'elles sont protégées par classe.Si nous voulons que nos variables d'instance soient accessibles dans tout le paquet, alors elles sont protégées par le paquet. À travers les projets qu'elles sont publiques. Ce que je veux dire, c'est que pour cacher des données, il faut une sorte de conteneur. où vous mettrez vos données et de se cacher en ce qui concerne le conteneur.

donc ce que je sens cacher des données n'est pas possible sans Encapsulation . Vous ne pouvez pas cacher vos données sans les mettre dans une forme de conteneur. Encore une fois, je vous rappelle que je mets ceci dans le contexte du langage orienté objet.

Mais oui Encapsulation est possible sans cacher vos données. Mettez toutes les choses public et vous pouvez le voir l'effet.

15
répondu bharatj 2016-02-29 10:55:38

Encapsulation : prendre l'exemple d'une capsule. Si vous l'ouvrez, il contient beaucoup d'ingrédients. L'Encapsulation de la programmation orientée objet est aussi comme cela. Comme son nom l'indique " Encapsulation signifie encapsuler (faire une capsule de) tous les membres de données, les attributs et les méthodes correspondantes à l'intérieur d'une capsule unique.

Comment faire: permet dis que tu as fait une classe appelée "voiture". Maintenant la voiture a un prix de couleur et le modèle. Ce sont des attributs, et il a une méthode d'exécution. Donc, ici, vous avez encapsulé tous ces attributs et méthodes d'un véhicule nommé "Voiture". Quand vous créez une instance de voiture comme cela

Car myCar = new Car();

vous pouvez accéder à tous les attributs de Car en utilisant la variable myCar.

data hiding ": la dissimulation des données est contrôlée en Java à l'aide de modificateurs d'accès. Pour accéder à la membres de données vous utilisez ACCESSORS tandis que pour modifier les données vous utilisez " mutateurs ". Java ne fournit pas d'accesseurs et de mutateurs par lui-même, vous les créez vous-même (getters et setters). Tandis que C # fournit des propriétés pour le faire.

7
répondu Samar Hussain 2015-05-14 10:37:11

je déteste faire cela mais, de Wikipedia :

dans les langages de programmation, encapsulation est utilisé pour se référer à l'un des deux des notions liées mais distinctes, et parfois à la combinaison dont:

  1. mécanisme de langage pour restreindre l'accès à certains composants de l'objet.
  2. une construction de langue qui facilite le groupement des données avec les méthodes (ou d'autres fonctions) fonctionnant sur ces données

votre explication était plus proche de la première notion, l'intervieweur recherchait quelque chose sur la seconde.

3
répondu Chris Dargis 2016-02-26 10:45:57

"Data encapsulation renvoie au mécanisme de qui maintient toutes les propriétés et méthodes connexes dans une seule entité .

Exemple : Une Voiture. Il maintient les roues directrices, les pneus, le moteur et toutes les pièces connexes en une seule entité de collectif connue sous le nom de Car .

dans les langages de programmation encapsulation est réalisé avec classes . Une classe contient toutes les propriétés et méthodes associées one single entity qui est conçu pour effectuer une tâche spécifique.


les données cachant se réfère à Cacher les détails sans importance de l'utilisateur et lui montrer seulement les données pertinentes.

exemple : lorsque nous pressons les freins ou l'accélérateur dans une voiture, nous ne savons pas ce qui se passe derrière le scène ( comment sa augmente sa vitesse ou comment de son appliquant les freins dans les pneus). Tout ce que nous savons, c'est que nous avons frein et accélérateur pour effectuer le résultat désiré.

Dans la programmation c'est fait avec l'aide de modificateurs d'accès . Privé membres non accessible à partir de l'extérieur de la classe seulement public les membres sont accessibles aux utilisateurs. Le les membres privés ne peuvent être consultés qu'à partir de membres de la classe fournissant ainsi la sécurité pour les membres privés à être évalués directement à partir de l'extérieur de la classe.

3
répondu alok kumar 2017-05-27 01:57:30

la question semble trompeuse, je doute que quelqu'un d'autre que l'intervieweur puisse y répondre et il y a des chances que sa réponse soit fausse. Plus important encore, il n'est pas clair ce que la question est censée évaluer ou découvrir.

pourtant, je lui ai donné une certaine pensée et ce qui suit est ce que je crois pourrait être ma tentative de répondre à la question.

Avec Modificateurs D'Accès

en Java, encapsulation est mise en œuvre en masquant les détails à l'aide des modificateurs d'accessibilité (c.-à-d. publics, protégés, privés, etc.).). Avec ces niveaux d'accessibilité, vous pouvez contrôler le niveau de masquage des informations. Moins le niveau est restrictif, plus le changement est coûteux lorsqu'il se produit et plus la classe est couplée avec d'autres classes dépendantes (c.-à-d. classes d'utilisateurs, sous-classes).

évidemment, l'encapsulation est plus qu'un État de dissimulation. En Java, vous pouvez cacher des classes entières et des interfaces et leur état et leurs comportements, par ceci, cachant les détails d'implémentation d'une API entière.

par exemple, la méthode Arrays.asList() renvoie une implémentation List , mais nous ne nous soucions pas de quelle implémentation, tant qu'elle satisfait l'interface publique List , n'est-ce pas?. La mise en œuvre peut être modifiée à l'avenir sans nous affecter, les utilisateurs de la méthode, mais la mise en œuvre réelle nous est cachée.

Jusqu'à ce point, il on dirait que l'encapsulation dépend entièrement de la capacité d'un langage de programmation à cacher des détails, et donc qu'elle ne peut être réalisée sans modificateurs d'accès, n'est-ce pas?

Sans Modificateurs D'Accès

Cependant, comment un langage comme Python réalise l'encapsulation quand il n'a pas de modificateurs d'accès? Tout est public en Python? Cela signifie-t-il que l'encapsulation n'est pas possible?

Que si, par convention, nous définissons l'interface publique de nos composants et ensuite accéder à l'état et au comportement des objets uniquement via leur interface publique? Evidemment, pour cela nous avons besoin d'une compréhension claire des abstractions dans notre domaine du problème et comment ceux-ci sont censés être consommés par nos utilisateurs.

pour moi, il semble que la question de l'entrevue visait à évaluer l'encapsulation comme un concept plus large, qui dépend de la définition d'abstractions très claires, et non juste un sous-produit d'une fonctionnalité du langage comme des modificateurs d'accès.

le rôle de L'Abstraction

C'est pourquoi, à mon avis, pour vraiment comprendre l'encapsulation, on doit d'abord comprendre l'abstraction.

pensez, par exemple, au niveau d'abstraction dans le concept de voiture. Une voiture est complexe dans sa mise en œuvre interne. Ils ont plusieurs sous-systèmes, comme un système de transmission, un système de coupure, un système de carburant, etc.

Cependant, nous avons simplifié son abstraction, et nous interagissons avec toutes les voitures dans le monde à travers l'interface publique de leur abstraction. Nous savons que toutes les voitures ont un volant à travers lequel nous contrôlons la direction, ils ont une pédale que lorsque vous appuyez sur elle, vous accélérez la voiture et contrôler la vitesse, et un autre que lorsque vous appuyez sur elle, vous le faites s'arrêter, et vous avez un levier de vitesse qui vous permet de contrôler si vous allez en avant de l'arrière. Ces caractéristiques constituent le interface publique de la voiture de l'abstraction. Le matin, vous pouvez conduire une berline et puis sortir de là et conduire un 4x4 dans l'après-midi comme si c'était la même chose.

Ce n'est pas que vous ne pouvez pas ouvrir le capot et voir comment tout cela fonctionne. Cependant, peu d'entre nous connaissent les détails de la façon dont toutes ces caractéristiques sous-jacentes sont mises en œuvre sous le capot, et la vérité est que nous n'avons pas besoin de connaître les détails pour conduire une voiture. Toutes ces choses sont encapsulés sous l'abstraction de voiture. Il suffit de connaître l'interface publique de l'abstraction.

pensez à l'époque où les wagons n'étaient pas munis d'un système hydraulique directionnel. Un jour, la voiture l'a inventé, et ils décident de le mettre dans des voitures à partir de là. Encore, ceci ne change pas la façon dont les utilisateurs lorsqu'ils interagissent avec eux. Tout au plus, les utilisateurs ont pu constater une amélioration dans l'utilisation du système directionnel. Un changement comme celui-ci a été possible parce que le la mise en œuvre interne d'une voiture a été encapsulé.

cela démontre clairement qu'en cachant les détails de la façon dont les systèmes directionnels ont été mis en œuvre, ils pouvaient le changer en toute sécurité sans affecter l'interface publique de la voiture et, par conséquent, sans affecter la façon dont les utilisateurs interagissaient avec elle.

maintenant, je pense que les fabricants de voitures ont décidé de mettre la bouchon de carburant sous la voiture, et pas sur l'un de ses côtés. Vous allez acheter une de ces voitures, et quand vous êtes à court d'essence, vous allez à la station d'essence, et vous ne trouvez pas le bouchon du réservoir de carburant. Tout à coup, on se rend compte qu'il est sous la voiture, mais on ne peut pas l'atteindre avec le tuyau de la pompe à essence. Maintenant, nous avons rompu le contrat d'interface publique, et donc, le monde entier se brise, il tombe en morceaux parce que les choses ne fonctionnent pas comme prévu. Un tel changement coûterait des millions. Nous aurions besoin de changer tout les pompes à essence dans le monde. Quand nous cassons encapsulation nous devons payer un prix.

donc, comme vous pouvez le voir, l'objectif de l'encapsulation est de minimiser l'interdépendance et faciliter le changement . Vous maximisez l'encapsulation en minimisant l'exposition des détails de mise en œuvre. L'état d'une classe ne doit être accessible via son interface publique.

La beauté de l'encapsulation est le pouvoir de changer les choses sans affectant ses utilisateurs .

nous pourrions dire que cet objectif ultime dépend d'une planification et d'une conception soignées. En Java, les modificateurs d'accès sont un moyen de donner vie à ces idées, mais dans un langage où cette fonctionnalité n'existe pas, il est tout aussi possible de réaliser l'encapsulation.

2
répondu Edwin Dalorzo 2012-09-01 15:25:21

Dans la classe, les attributs et les comportements sont placés ensemble. Une encapsulation signifie que lorsque vous créez une classe, cela signifie que vous réalisez l'encapsulation de principe. Parce que les données et les comportements sont encapsulés dans la classe. Ainsi, la dissimulation de données est une partie importante du terme - encapsulation. Et cela signifie les points d'accès de l'objet.

1
répondu Aleko Gharibashvili 2013-04-09 22:09:46

j'ai vu beaucoup de discussion est déjà fait, juste pour simplifier de ma compréhension:

Encapsulation Garantit que le comportement d'un objet ne peut être affecté que par son API. Il nous permet de contrôler combien un changement à un objet aura un impact sur d'autres parties de le système en veillant à ce qu'il n'y ait pas de dépendances inattendues entre composants sans rapport.Modificateur d'accès peut être utilisé pour réaliser l'Encapsulation.

cacher des informations Dissimule comment un objet implémente sa fonctionnalité derrière l'abstraction de son API. Il nous permet de travailler avec des abstractions plus élevées en ignorant les détails de niveau inférieur qui sont sans rapport avec la tâche à portée de main. L'Abstraction au niveau de la conception peut être utilisée pour réaliser la dissimulation des données.

1
répondu Sanjay Jain 2013-10-29 09:32:08

la définition la plus facile de l'encapsulation est" données de liaison et le code qui fait fonctionner les données en une seule unité", de sorte que les données ne peuvent pas être accessibles directement par le monde extérieur.

en langage de structure comme les données c est déclaré au début du bloc et utilisé directement, accessible ouvertement(tout tom, dick et harry peuvent accéder aux données). La dissimulation de données est un concept qui limite l'accès aux données directement et ouvertement à tom dick et harry.

L'Encapsulation est un des moyens de réaliser la dissimulation des données. Vous réalisez la dissimulation des données en assemblant les données et les fonctions (Encapsulation).

comment réaliser en JAVA, voir n'importe quel exemple de fonction getter(), setter() en JAVA. Vérifier cette

Comment fonctionnent les getters et les setters?

1
répondu Aarif Shaikh 2017-05-23 11:47:26

selon moi, Encapsulation renvoie à l'idée de données de liaison et méthode à une unité unique unité appelée classe" 1519110920 . Toutefois, il existe deux critères principaux pour lier les données et les méthodes . L'un d'entre eux cache des informations, mais pas le seul . Être parfaitement concise je dirais que les deux principaux critères sont

  1. Couplage Faible (assurer par se cacher de l'information)
  2. Haute Cohésion
1
répondu Maaz Rehman 2017-01-20 12:42:54

Encapsulation: l'Encapsulation est l'un des pilier de OOPS, aussi est sur-ensemble pour les deux autres termes, les données de la clandestinité et de l'abstraction. (Données cachées, comme le terme se réfère.. Les données ne peuvent être stockées que dans des variables. Pour masquer les données du monde extérieur nous utilisons les données à cacher concept. Public, privé, protégé il s'agit de trois modificateurs d'accès mis à notre disposition pour la dissimulation de données. Par défaut est limitée à forfait. Protégé limité à la classe héritée.) ** Variables privées ne sont accessibles qu'à l'intérieur de la classe ce qui signifie que s'il y a une classe intérieure, il y a aussi des variables privées qui peuvent être appelées directement. Seules les Classes internes statiques peuvent appeler des Variables statiques.

en train D'arriver à L'Abstraction (C'est-à-dire Intangible). L'Abstraction est également considérée comme le processus pour cacher la mise en œuvre à l'utilisateur et ne fournir que le résultat final. Exemple: nous avons une catégorie de personnes qui a des biens de "poids". Cette propriété est assez délicate parce que nous ne pouvons pas accepter moins de 0 poids pour une personne. Aussi, nous ne peut pas accepter plus de 500 kg. Donc masquer l'implémentation pour ceux-ci sera dans la méthode setter. Cette chose qui cache les détails de la mise en œuvre est abstraite.

* * et le paquet complet, c'est-à-dire rendre l'objet privé et la mise en œuvre de la logique dans setter et getter, s'appelle ENCAPSULATION.

0
répondu Vrajendra Singh Mandloi 2016-01-04 16:30:14
  1. L'ENCAPSULATION est le groupement des données (champs) et du comportement (méthodes) dans les classes.
  2. Maintenant, vous devez fournir le contrôle d'accès sur les données en utilisant des modificateurs d'accès (privé/protégé/public ou par défaut) qui est la dissimulation de données. Il protège les données du monde extérieur où vous ne voulez pas donner l'accès.
  3. aussi, pour masquer la complexité des opérations, vous devez utiliser des interfaces afin d'atteindre ABSTRACTION.
0
répondu Shahnawaz Khan 2016-03-22 08:21:09

Encapsulation signifie lier les éléments de données et la méthode(comportement) dans une seule unité et fournir autant d'informations que l'Utilisateur a besoin facilement vous pouvez dire [encapsulation=masquage de données+abstraction].

la Classe est entièrement encapsulé élément en java

cacher des données signifie déclarer des variables de données comme privées pour le protéger de l'accès non autorisé, mais si vous donnez un setter public et méthode getter pour validation.

0
répondu Dharmpal Chaudhary 2016-06-30 17:44:34

le processus de définition d'une classe en cachant ses données d'un accès direct depuis le membre de classe extérieur et en fournissant l'accès seulement par la méthode setter et getter accessibles au public par une validation appropriée il est appelé Encapsulation.

0
répondu YaDav MaNish 2016-11-26 14:01:56

le processus consistant à lier les membres de données et les méthodes correspondantes en une seule unité n'est rien d'autre qu'une encapuslation.

Encapsulation = Données Cacher + Abstraction

0
répondu Ramesh Kumar 2017-08-14 07:39:25

la dissimulation de données signifie que nous assurons la sécurité des données de la classe.

Abstraction signifie cacher le code en définissant les fonctions des membres.

L'Encapsulation est la combinaison de l'abstraction et de la dissimulation des données, ce qui signifie que nous sommes habillage de données et le code associé à ces données. Ex classe de haricots

    class student {
private int age;  // Data Hiding 
public setAge(){} // Abstraction 
public getAge(){} // Abstraction 
}
La classe

est encapsulée.

encapsulation = masquage de données + abstraction

0
répondu Brijesh Rana 2017-08-25 09:33:44

De Wikipedia

l'Encapsulation l'Encapsulation est une programmation orientée objet concept qui lie les données et les fonctions qui manipulent les données, et qui protège à la fois contre les interférences extérieures et les abus. Données l'encapsulation a conduit à l'important concept OOP de dissimulation des données.

si une classe ne permet pas au code appelant d'accéder aux données internes de l'objet et permet l'accès par des méthodes seulement, c'est une forme forte de abstraction ou dissimulation de l'information connue sous le nom d'encapsulation. Quelque les langues (Java, par exemple) laissent les classes appliquer les restrictions d'accès explicitement, par exemple dénotant des données internes avec le privé mots-clés et méthodes de désignation destinés à être utilisés par code en dehors de la de classe avec le mot-clé public. Les méthodes peuvent également être conçues en public, niveau privé ou intermédiaire tel que protégé (qui permet l'accès de la même classe et ses les sous-classes, mais pas les objets d'une autre classe.) Dans d'autres langues (comme Python) ce n'est appliqué que par convention (par exemple, les méthodes privées peuvent avoir des noms qui commencent avec un trait de soulignement). L'Encapsulation empêche le code externe d'être concernés par le fonctionnement interne d'un objet. Cela facilite l' code refactoring, par exemple en permettant à l'auteur de la classe de changer la façon dont les objets de cette classe représentent leurs données en interne sans changer aucun code externe (comme tant que les appels de méthode "publics" de la même façon). Il encourage également les programmeurs à mettre tout le code cela concerne un certain ensemble de données dans la même classe, qui organise le pour une compréhension facile par d'autres programmeurs. L'Encapsulation est une technique qui encourage le découplage.

0
répondu Adelin 2018-06-28 20:15:51

essentiellement l'encapsulation de données est un processus tandis que la dissimulation de données est une technique . Dans l'encapsulation, les données peuvent être publiques ou privées, mais dans la dissimulation des données, les données ne sont que privées. Ainsi, la dissimulation de données utilise L'Encapsulation, mais elle utilise aussi différentes techniques pour conserver les données autorisées à l'accès seulement. Espérons que cela aide!

0
répondu Ali.Chauhdary 2018-07-02 15:22:11