Quelle est la définition de "méthode d'accès"?
J'ai été d'avoir un argument à propos de l'utilisation du mot "accesseur" (le contexte de la programmation Java). J'ai tendance à penser que les accesseurs comme implicitement d'être "accesseurs de propriété" -- qui est le terme sous-entend que c'est plus ou moins là pour fournir un accès direct à l'objet interne de l'état. L'autre partie insiste sur le fait que toute méthode qui touche à l'état de l'objet n'est en aucune façon un accesseur.
Je sais que les gars, vous ne pouvez pas gagner l'argument pour moi, mais je suis curieux de savoir comment vous définir le terme. 🙂
source d'informationauteur Rytmis
Vous devez vous connecter pour publier un commentaire.
Par des accesseurs, j'ai tendance à penser que les accesseurs et mutateurs.
En insistant sur le fait que toutes les méthodes qui touchent à l'objet interne de l'état sont des accesseurs, il semble que toute instance méthode qui utilise l'état de l'objet serait un accesseur, et qui ne semble tout simplement pas droit. Ce genre de méthode d'instance de ne pas utiliser l'état de l'objet? En d'autres termes, une méthode d'instance qui n'utilise pas l'état de l'objet, d'une certaine façon ne devrait pas être une méthode d'instance pour commencer -- il devrait être une méthode de classe.
Par exemple, si le
BigDecimal.ajouter
méthode être considéré comme un accesseur? C'est une méthode qui va lire la valeur de l'instance que l'add
méthode a été appelée sur, puis retourner le résultat après l'ajout de la valeur d'une autreBigInteger
. Il semble assez simple à suivre, que lesadd
méthode d'instance n'est pas d'une lecture, ni un setter.Une méthode d'accesseur fait exactement ce qu'il indique sur l'étain: accède à un état du type sans effets secondaires (à part paresseux instanciation, peut-être, qui n'est pas quelque chose que l'appelant devrait normalement savoir).
Méthodes qui permettent de modifier l'état sont plus utilement envisagée (à mon avis) comme des mutateurs.
En plus de google et de wikipédia, l' Java Langage De Spécification montre un exemple d'une méthode d'accesseur:
Alors, oui, je dirais que c'est juste la valeur d'un champ. Le compilateur peut inline ce, en la convertissant en une simple lecture, de sorte que rien de plus que ce n'est probablement pas un accesseur.
Méthodes d'accès : getRed, getGreen, et getBlue
Ces méthodes est généralement accéder à une valeur.
Mutateur méthodes : setRed, setGreen, setBlue
Un mutateur va muter une valeur
J'ai toujours passé par la première définition. Ainsi, en règle qui s'applique seulement à des getters et setters. Si nous allons par la seconde méthode, puis c'est beaucoup moins utile de faire la distinction, car qui couvre presque toutes les méthodes.
Méthodes d'accès sont utilisés pour accéder aux champs d'un objet. Alors que les accesseurs et mutateurs sont à la fois des méthodes accesseurs. Observateur méthode est le bon terme pour une méthode plus générale observation à propos d'un objet, sans causer extérieurement observables effets secondaires. Une méthode dont le but principal est de provoquer des effets secondaires est une méthode mutateur. Par conséquent, les poseurs sont un exemple d'une méthode mutateur. Pour les bonnes pratiques d'ingénierie, public setters doit être évitée car ils font qu'il est impossible pour une classe pour faire respecter les invariants sur ses données: ils violent l'abstraction de la barrière qu'une classe doit normalement appliquer.
Il est bon d'être en mesure de différencier les getters et les setters dans les techniques de conversation.
Accessor
méthodes sont partenaires demodifier
méthodes.Accessor
s lire l'état d'un objet (getA()
), tandis quemodifier
s en écriture à l'état (setA(Object)
).Une méthode qui permet d'accéder (peut être " lu " l'accès ou 'accès en écriture") à l'intérieur d'un objet est une "méthode d'accesseur'.
Les auteurs ici certainement l'utilise de cette manière:
http://www.javaworld.com/article/2073723/core-java/why-getter-and-setter-methods-are-evil.html
http://c2.com/cgi/wiki?AccessorsAreEvil
Je pense que le terme peut provenir de Common Lisp (ne pas tout?) -- avec setf utilisé pour modifier la valeur de l'accesseur de machines à sous.