Qu'est-ce que l'utilisation de l'encapsulation quand je suis en mesure de modifier les valeurs des propriétés avec des méthodes de définition?
J'essaie de comprendre un grand nombre de fois, mais je n'ai pas réussi à le comprendre.
Encapsulation est la technique de fabrication des champs dans une classe privée
et en donnant accès aux champs via des méthodes publiques. Si un champ est
déclaré en privé, il ne peut pas être consulté par toute personne en dehors de la classe,
ainsi cacher les champs à l'intérieur de la classe.
Comment pouvons-nous changer les valeurs des champs par des méthodes de définition? Comment pouvons-nous empêcher l'accès aux champs directement? Qu'est-ce que l'utilisation réelle de l'encapsulation?
OriginalL'auteur PSR | 2013-05-07
Vous devez vous connecter pour publier un commentaire.
Supposons que vous disposez d'un
age
propriété.À l'utilisateur d'entrer une valeur de
-10
, qui, bien que est un nombre valide, est une défaillance de l'âge. Une méthode de définition pourrait avoir de logique qui vous permettra d'attraper les choses.Un autre scénario, serait d'avoir la
age
champ, mais la cacher. Vous pouvez également avoir un champ Date de Naissance, et dans sa définition, vous auriez quelque chose comme ça:Certaines lumière des mécanismes de validation de vos modèles, pourrait rendre plus simple.
OriginalL'auteur npinti
J'ai également été confus comme vous trop longtemps jusqu'à ce que j'ai lu le livre de l'Encapsulation et l'Héritage dans le Langage de Programmation Orienté Objet et un site web qui explique l'importance de l'Encapsulation. En fait j'ai été dirigé à partir du site web du livre.
Les gens disent toujours encapsulation est "rétention d'information" donc, peut-être, faire de l'encapsulation l'accent sur la sécurité comme l'utilisation principale. Oui, vous êtes de cacher de l'information dans la pratique, mais qui ne devrait pas être la définition telle qu'elle pourrait confondre les gens.
Encapsulation est tout simplement la "réduction des inter-dépendances entre séparément modules préparés par la définition stricte des interfaces externes" (citant le livre). C'est-à-dire que quand je suis en construction d'un module, je veux un contrat strict entre mes clients et moi sur la façon dont ils peuvent accéder à mon module. La raison étant que, pour que je puisse améliorer le fonctionnement interne, sans que cela n'AFFECTE mon client, de la vie, de l'application ou de ce qu'ils sont à l'aide de mon module. Parce que leur "module" n'est pas exactement dépendent du fonctionnement Interne de mon module, mais cela dépend de la "interface externe", j'ai mis à leur disposition.
Donc, si je ne fournis pas de mon client avec un setter et leur a donné un accès direct à une variable, et je me rends compte que j'ai besoin de régler certaines restrictions sur la variable avant mon client pourrait l'utiliser, me changer, pourrait être moi, de changer la vie de mon client, ou à la demande de mon client avec une ÉNORME DÉPENSE. Mais si je fournis le "contrat strict" par la création d'une "stricte interface externe" j'.e setter, alors je peux facilement changer mon fonctionnement interne avec très peu ou pas de frais pour mes clients.
Dans le setter de la situation (utilisation de l'encapsulation), s'il arrive que lorsque vous définissez une variable, et je l'ai renvoyer un message vous informant qu'il a été attribué, maintenant, je pouvais envoyer un message via mon "interface", d'informer mon client de la nouvelle façon de mon module doivent être en interaction avec elle, je.e "Vous ne pouvez pas affecter des nombres négatifs" qui est si mes clients essayez d'affecter un nombre négatif. Mais si je n'ai pas utiliser l'encapsulation, et a donné mon client un accès direct à une variable et je fais mes changements, il pourrait aboutir à un système en panne, parce que,si la restriction que j'ai mis en place, c'est que, vous ne pouvez pas enregistrer de négatifs et de mon client ont toujours été en mesure de stocker des négatifs, mes clients ont un système s'est écrasé dans leurs mains (si que "le système s'est écrasé" était un système bancaire, imaginez ce qui pourrait arriver).
Afin d'encapsulation est plus sur la réduction de la dépendance entre le module, donc améliorations peuvent être apportées "tranquillement" avec peu ou pas de frais à d'autres modules qui interagissent avec elle, que c'est de la sécurité. En raison de l'interaction des modules dépendent de la "stricte interface externe ou de contrat strict".
J'espère que c'est ce qui explique correctement. Si non, on peut aller les liens ci-dessous et de le lire pour vous-même.
l'encapsulation des questions
L'Encapsulation et l'Héritage dans les Langages de Programmation Orientée Objet
suis contente qu'il vous a aidé.
OriginalL'auteur Uche Dim
Que l'utilisation réelle de l'encapsulation est aussi dans le fait que vous pouvez faire des vérifications supplémentaires/traitement sur la façon dont les valeurs sont définies.
OriginalL'auteur Eugene
Vous n'êtes pas empêcher l'accès aux champs -- vous êtes le contrôle de la façon dont d'autres peuvent accéder à certains champs. Par exemple, vous pouvez ajouter de la validation de votre méthode de définition, ou vous pouvez également mettre à jour certaines autres personnes à charge lorsque la méthode de définition d'un champ est appelé.
Vous pouvez empêcher d'écrire ou de lire l'accès au terrain (par exemple, seulement un getter ou un setter respectivement), mais avec des propriétés d'encapsulation vous permet de faire plus que cela.
OriginalL'auteur mikey
Seulement si la méthode setter vous permet de le faire.
Le setter et getter à contrôler si et comment vous pouvez accéder aux champs.
Un setter peut vérifier si la valeur est valide. Il peut demander à un SecurityManager si vous devriez être autorisé à le faire. Il peut convertir entre les types de données. Et ainsi de suite.
OriginalL'auteur Thilo
Si vous avez des champs privés qu'ils ne peuvent pas être accessible en dehors de la classe, cela signifie que, fondamentalement, ces champs n'existent pas pour le monde extérieur, et oui, vous pouvez modifier leur valeur par le biais des méthodes de définition, mais en utilisant des méthodes de définition, vous avez plus de flexibilité et de contrôle-à-dire, qui se met à modifier les champs et à quelle valeur peuvent-ils être modifiés à...en gros avec l'encapsulation vous arrivez à mettre des restrictions sur la façon et qui change de vos champs.
Par exemple, vous avez: private double salaire, vous setter méthode pourrait restreindre que seuls les membres du personnel des rh peut modifier le champ salaire il peut être écrite comme:
Imaginez si le salaire est public et peut être accéder directement tout peut changer, cependant, et quand ils le veulent, ce essentiellement de l'importance de l'encapsulation
OriginalL'auteur Sello
Le but n'est rien, mais la protection de tout ce qui est sujette à changement. Vous avez plein d'exemples sur le web, je vous donne donc quelques-uns des avantages de celui-ci:
immutable class
en JavaOriginalL'auteur Asier Aranbarri
D'accéder à des champs thru méthodes de faire la différence, car il rend la programmation orientée objet. Par exemple, vous pouvez vous accorder de classe et de modifier le comportement qui vous ne pouvez pas faire avec accès direct. Si vous avez des getters /setters, vous pouvez faire une procuration de votre classe, et faire de l'AOP ou de faire un 1.4 dynamic proxy. Vous pouvez faire une maquette de votre classe et de faire des tests unitaires...
OriginalL'auteur Evgeniy Dorofeev
Permet supposons que vous faites un de Date personnalisé de classe avec le suivant setters /getters:
En interne, vous pouvez stocker la date à l'aide de:
Ou vous pouvez stocker la date à l'aide de java.lang.Date-objet:
Encapsulation de ne pas exposer la façon dont votre classe travaille à l'interne. Il vous donne plus de liberté pour modifier le fonctionnement de votre classe fonctionne. Il vous donne la possibilité de contrôler l'accès à votre classe. Vous pouvez vérifier si ce que l'utilisateur a entré est valide (vous ne voulez pas que l'utilisateur à entrer un jour avec une valeur de 32).
OriginalL'auteur MMeersseman
Encapsultaion est utilisé pour cacher les variables de membre ,en faisant de membre à titre privé et l'accès à cette variable membre par les méthodes getter et setter.
Exemple
classe d'Encapsulation{
}
classe EncapsulationMain {
}
vous ne pouvez pas accéder à la valeur privée en dehors de la classe.
OriginalL'auteur Saurabh Mishra
Bien, l'encapsulation n'est pas tous sur le masquage de données. Il est tout au sujet d'obtenir le contrôle sur ce qui est stocké dans les champs. Utilisation de l'encapsulation, nous pouvons faire un champ en lecture seule ou en écriture seule en fonction des besoins.Les utilisateurs ne savent pas comment les données sont stockées dans les champs. Nous pouvons utiliser de cryptage spécial dans les méthodes de définition et de le stocker dans les champs.
Par exemple, l'homme est un objet. Nous avons besoin uniquement le champ nom de l'homme pour être lu par l'utilisateur, mais pas à être modifié. Ensuite, nous définissons seule méthode get sur le champ nom.C'est de cette façon, l'encapsulation est utile.
OriginalL'auteur Vinjamuri Satya Krishna
L'idée principale derrière l'encapsulation des données est la clandestinité. Il y a plusieurs raisons pourquoi nous utilisons l'encapsulation dans la programmation orientée objet. Certaines des raisons pour lesquelles nous l'encapsulation sont comme suit (que L'utilisation réelle de l'encapsulation).
Meilleure maintenabilité: Lorsque toutes les propriétés sont privées et encapsulé, il est facile pour nous de maintenir le programme en changeant simplement les méthodes.
Faciliter le Débogage Facile: Ceci est en ligne avec le point ci-dessus. Nous savons que l'objet ne peut être manipulé à l'aide de méthodes. Donc, de ce fait, il est facile à déboguer et à repérer les bugs.
Ont un Environnement Contrôlé: permettre aux utilisateurs d'utiliser les objets donnés, de manière contrôlée, à travers des objets.
Masquer la Complexité: Masquage de la complexité de pertinence pour les utilisateurs. Parfois, certaines propriétés et méthodes sont la uniquement pour usage interne et l'utilisateur n'a pas à savoir à propos de ces. Ce fait est simple pour l'utilisateur d'utiliser l'objet.
Donc, pour répondre à la question, "qu'est-Ce que l'utilisation de l'encapsulation quand je suis en mesure de modifier les valeurs des propriétés avec des méthodes de définition?", étant donné ci-dessus sont quelques-uns des principaux raisons pour lesquelles nous utilisons de l'encapsulation. Pour donner une idée sur pourquoi, les getters et les setters sont utiles, étant donné ci-dessous sont quelques-uns des points importants, obtenus à partir de ce l'article.
Vous pouvez limiter le nombre de valeurs qui peuvent être stockées dans un champ (c'est à dire la dimension de genre doit être F ou M).
Vous pouvez prendre des mesures lorsque le champ est modifié (événement déclencheur, valider, etc).
Vous pouvez fournir la sécurité des threads par la synchronisation de la méthode.
Vous pouvez passer à une nouvelle représentation des données (c'est à dire des champs calculés, les différents type de données)
OriginalL'auteur Keet Sugathadasa
Si vous avez de la classe de toutes ses propriétés sont privées, ce qui signifie qu'ils ne peuvent pas être accessible depuis l'extérieur de la classe - et la seule façon d'interagir avec des propriétés de la classe est par le biais de ses méthodes publiques.
Vous sont en train de changer tha valeurs en donnant au public l'accès à ces méthodes(setters).
utilisation de l'encapsulation des champs d'une classe peut être faite
read-only
ouwrite-only.
OriginalL'auteur ꜱᴜʀᴇꜱʜ ᴀᴛᴛᴀ
Au lieu de laisser tout le monde accéder aux variables directement:
Est préférable d'utiliser ENSEMBLE et méthodes GET, ou par exemple, juste la méthode GET (Parfois, vous ne voulez pas personne pour définir d'autres de la valeur à cette variable).
OriginalL'auteur user2245180
En utilisant l'encapsulation de vous séparer de votre classe à partir de l'extérieur du monde (autres classes) et côté monde peut accéder et modifier votre classe de variables d'instance, par le biais de modificateurs d'accès, ce qui présente plusieurs avantages:
-Vous pouvez faire des coupes dans votre getter/setter.
-Vous pouvez valider et normaliser (par exemple garniture espaces, retirer caractère spécial,...) de Votre entrée dans la méthode d'initialisation.
Et également vous pouvez masquer votre mise en œuvre du monde extérieur, par exemple, vous avez une collection de tableau liste dans votre classe et vous écrivez votre méthode de lecture comme ce
Donc dans ce cas, à l'avenir, si vous décidez de changer de mise en œuvre de la collecte à partir de la liste des ensembles à autre chose comme lié liste, vous êtes libre de le faire, car à côté monde ne sait rien au sujet de votre mise en œuvre.
OriginalL'auteur NԀƎ