Comment avez-vous accès aux variables privées à l'aide de la fonction publique?
Donc je ne sais pas si vous vous avez été/va sur le NewBoston.Com (grande ressource par la voie), mais j'ai été en regardant cette vidéo et le professeur disait comment vous pouvez accéder à des informations personnelles à l'aide de la fonction publique...
Voici la vidéo:
http://www.youtube.com/watch?v=jTS7JTud1qQ
Et bien sûr, il suffit de sauter à la fin pour aller à l'essentiel, c'.
La chose que je ne comprends pas bien, est de savoir comment pouvez-vous accéder à des informations privées à l'aide d'une fonction publique. Si vous faites une fonction publique qui permet à quiconque de définir le nom, et d'obtenir que le nom, alors n'est-il pas juste public de toute façon?, Ne serait-ce que personne ne soit en mesure de mess mon code et mon choix de sortie?
OriginalL'auteur Jim Jam | 2013-12-12
Vous devez vous connecter pour publier un commentaire.
Au point de fournir une méthode publique pour modifier une variable privée est que vous pouvez ajouter des contrôles supplémentaires.
Il n'y a pas beaucoup de différence entre
et
Mais, dans le second cas, vous pouvez ajouter de la logique qui rejette certaines données (c. g. une valeur négative) ou des mises à jour d'autres domaines. Vous pouvez vous assurer que les données de votre objet sera conséquente. Si vous suivez la première approche, que la logique devrait répliqué à chaque fois que la propriété est accessible directement (note: de nombreux programmeurs vont oublier de le faire).
L'un des avantages de l'encapsulation (en cachant les détails internes) est efficacement que vous pouvez modifier les détails de l'implémentation d'une classe/d'un module sans affecter (et avoir besoin de changer) le reste du code, mais il n'est pas le seul. Par exemple, mon exemple est en train de parler sur le maintien d'une cohérence interne de l'état.
OriginalL'auteur SJuan76
La création de trivial getters et les setters (fonctions publiques) est un peu inutile à mon avis. Si votre classe fonctionnalité est entièrement exprimée par les variables privées, alors trivial getters et les setters sont un gaspillage et un peu une odeur de code. Peut-être que vous devriez utiliser une structure de la place.
Cependant fonctions publiques peuvent fournir une interface qui guide à l'usage de la classe et à la limite ce que vous pouvez faire avec les membres privés. Vous ne souhaitez pas que les utilisateurs de votre classe pour modifier les membres privés qui n'ont de sens que lorsqu'elles sont modifiées dans la synchronisation de l'étape.
Il permet également la mise en œuvre du changement, sans changer l'interface. Par exemple, dire que vous voulez augmenter la taille d'une carte de hachage. Le Pseudo-code:
Maintenant votre mise en œuvre pour
increaseSize()
peut réellement vérifier si la nouvelle taille est plus grande que la précédente. Il peut également créer un nouveau backing_array et de copier les données sur. L'exposant de la variable privée taille de l'atteindre ni l'vérifiez la bonne valeur de la taille, ni la répartition de la nouvelle sauvegarde de tableau.OriginalL'auteur Rajiv
Désolé, je ne suis pas de regarder la vidéo, mais je suppose que vous parlez de choses comme les méthodes de lecture (fonctions pour obtenir la valeur d'une propriété -- un membre de données privées dans ce cas) et les setters (fonctions à définir ces valeurs).
Si vous fournissez des getters et setters comme pure pass-through fonctions, alors vous avez raison, c'est vraiment pas très différent que de simplement faire les membres du public. L'normales d'utilisation, cependant, est de fournir de l'intelligence dans vos fonctions d'accesseur -- vous permettant, par exemple, placer des limites sur les valeurs qui peuvent être définies ou à la location (extrait valeurs calculées plutôt que seulement basée sur une pure valeur.
OriginalL'auteur mah
Si vous n'étiez pas en mesure d'accéder à des données privées de la fonction publique, vous serez en mesure d'y accéder uniquement à partir des fonctions privées, à droite. Toutefois, l'appel privé de fonctions de fonctions publiques doit par conséquent également être interdites,...
Comment êtes-vous censé pour accéder à des données privées?
OriginalL'auteur Bartek Banachewicz
Le but avec le public des "getters/setters" si vous, sont le fait qu'ils limitent l'utilisateur d'en faire plus que ce que vous voulez. Au lieu de leur apprendre/réglage du membre privé (dans lequel ils ne peuvent rien faire pour elle), vous pouvez limiter ce qu'ils peuvent/ne peuvent pas le faire en enveloppant le membre privé dans un accesseur public. De cette façon, à l'intérieur de cette propriété publique/fonction, vous pouvez limiter la valeur qu'ils peuvent le définir.
Vous pouvez aussi avoir la propriété publique/fonction obtenir le membre privé, mais d'éviter à l'utilisateur de réglage.
OriginalL'auteur ryrich
Code avec des getters/setters sont considérés comme "mieux" qu'direct privé de l'accès des membres, parce que ces fonctions peuvent ensuite contrôler toutes les entrées/sorties de ces variables et assurez-vous qu'il est du type, de la variété, ou quelle que soit la classe qu'elle attend. C'est une façon pour la classe de créateur à l'erreur-vérifier les données en cours de jeu ou de le manipuler avant de le retourner.
Si vous pouviez juste faire
classe.var = valeur;
vous pourriez muck les choses en les mettant dans le mauvais type de variable, ou débordant d'une certaine limite, ou même les mettre en valeur légitime qu'une certaine logique dans la classe de code en rupture avec. Pour les choses simples avec un seul développeur, il n'est généralement pas un problème, mais pour les professionnels de code c'est un très bon entraînement pour encapsuler les variables de membre au sein d'un get/set paire pour l'accès/l'écriture.
Nope. Mais ce n'est pas un endroit pour en discuter, donc je vais juste downvote et vous envoyer à la question appropriée ici, sur.
stackoverflow.com/a/12108025/560648
Le compilateur de vérification de type de la variable de membre de toute façon. Ce n'est pas une raison valable.
Vous n'avez pas à travailler avec des pointeurs très bien vous faire? Pas de vérification de type lorsqu'il n'y a pas de type pour vérifier. Toujours pas sûr de savoir comment ma réponse était différente de celle de la "upvoted' un au-dessus, qui dit essentiellement la même chose. Je n'ai jamais même sous-entendu que vous a pour encapsuler n'importe quoi, ou que vous devez le faire pour chaque membre de la var.
OriginalL'auteur Coder101101010