Je me suis disputé à propos de l'utilisation du mot "accesseur" (le contexte est la programmation Java). J'ai tendance à penser que les accesseurs sont implicitement des "accesseurs de propriétés" - en d'autres termes, le terme implique qu'il est plus ou moins là pour fournir un accès direct à l'état interne de l'objet. L'autre partie insiste sur le fait que toute méthode qui touche de quelque façon que ce soit l'état de l'objet est un accesseur.
Je sais que vous ne pouvez pas gagner l'argument pour moi, mais je suis curieux de savoir comment vous définiriez ce terme. :)
Par accesseurs, j'ai tendance à penser aux accesseurs et aux setters.
En insistant sur le fait que toutes les méthodes qui affectent l'état interne de l'objet sont des accesseurs, il semble que toute méthode d'instance qui utilise réellement l'état de l'objet serait un accesseur, et cela ne semble tout simplement pas correct. Quel type de méthode d'instance n'utilisera pas 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 manière ou d'une autre ne devrait pas être une méthode d'instance pour commencer - mais une méthode de classe .
Par exemple, la méthode BigDecimal.add
doit-elle être considérée comme un accesseur? C'est une méthode qui lira la valeur de l'instance sur laquelle la méthode add
a été appelée, puis renverra le résultat après avoir ajouté la valeur d'un autre BigInteger
. Il semble assez simple que la méthode d'instance add
ne soit ni un getter ni un setter.
Une méthode d'accès fait exactement ce qui est écrit: accès à un état du type sans effets secondaires (mis à part l'instanciation paresseuse, peut-être, ce que l'appelant ne connaît normalement pas).
private int _age;
public int getAge()
{
return _age;
}
Les méthodes qui modifient l'état sont plus utilement considérées (à mon avis) comme des mutateurs.
En plus de googler et de wikipedia, la Spécification du langage Java montre ceci à titre d'exemple de méthode d'accès:
private static int N;
public static int getN() { return N; }
Donc, oui, je dirais que cela prend juste la valeur d'un champ. Le compilateur peut incorporer ceci, en le convertissant en une lecture simple, donc rien de plus que cela ne constitue probablement pas un accesseur.
Méthodes d'accesseur: getRed, getGreen et getBlue
Ces méthodes accèdent généralement à une valeur.
Méthodes Mutator: setRed, setGreen, setBlue
Un mutateur va muter une valeur
J'ai toujours passé par la première définition. Donc, généralement, cela s’applique uniquement aux accesseurs et aux passeurs. Si nous passons par la deuxième méthode, la distinction est beaucoup moins utile, car elle couvre presque toutes les méthodes.
Les méthodes d'accès sont utilisées pour accéder aux champs d'un objet. Donc, les accesseurs et les setters sont deux méthodes d'accès. Méthode d'observateur est le terme qui convient pour désigner une méthode permettant une observation plus générale d'un objet sans provoquer d'effets secondaires observables de l'extérieur. Une méthode dont le but principal est de provoquer des effets indésirables est la méthode mutator . Par conséquent, les setters sont un exemple d'une méthode de mutateur. Pour les bonnes pratiques d'ingénierie, les utilisateurs publics doivent être évités car ils empêchent une classe d'appliquer des invariants sur ses données: ils violent la barrière d'abstraction qu'une classe devrait normalement appliquer.
Il est bon de pouvoir différencier les getters et les setters dans une conversation technique. Les méthodes Accessor
sont des partenaires des méthodes modifier
. Accessor
s lit l'état d'un objet (getA()
), tandis que modifier
s écrit l'état (setA(Object)
).
Une méthode qui fournit un accès (peut être un "accès en lecture" ou "un accès en écriture") aux éléments internes d'un objet est une "méthode d'accès".
Les auteurs ici l'utilisent certainement de cette manière:
Je pense que le terme peut provenir de Common LISP (ne fait pas tout?) - avec setf utilisé pour modifier la valeur des slots accesseurs.