Was ist die Definition von „Accessormethode“?
-
05-07-2019 - |
Frage
Ich habe über die Verwendung des Wortes ein Argument wurde mit „Accessor“ (der Kontext ist die Java-Programmierung). Ich neige dazu, von Accessoren zu denken, wie implizit „Eigenschaftenaccessoren“ zu sein - das heißt, der Begriff impliziert, dass es mehr oder weniger gibt es einen direkten Zugang zu den internen Zustand des Objekts zu liefern. Die andere Partei besteht darauf, dass jede Methode, die den Zustand des Objekts in irgendeiner Weise berührt, ist ein Accessor.
Ich weiß, dass ihr nicht das Argument für mich gewinnen kann, aber ich bin neugierig, wie Sie den Begriff definieren würde. :)
Lösung
Mit dem Accessoren, neige ich dazu, von Getter und Setter zu denken.
Mit dem Beharren, dass alle Methoden, die das Objekts internen Zustand berühren sind Accessoren, so scheint es, dass jede Instanz-Methode, die tatsächlich den Zustand des Objekts verwendet würde ein Accessor sein, und das scheint einfach nicht richtig. Welche Art von Instanzmethode nicht den Zustand des Objekts verwenden? Mit anderen Worten: eine Instanz-Methode, die das Staat nicht in irgendeiner Art und Weise des Objekts nicht verwenden sollte keine Instanz Methode sein, mit zu beginnen. - Es sollte eine Klassenmethode sein
Zum Beispiel sollte die BigDecimal.add
Methode wird ein Accessor in Betracht gezogen? Es ist eine Methode, die den Wert der Instanz gelesen wird, dass die add
Methode wurde aufgerufen, dann das Ergebnis zurück, nachdem Sie den Wert eines anderen BigInteger
hinzufügen. Es scheint ziemlich einfach, dass die add
Instanzmethode ist kein Getter noch ein Setter.
Andere Tipps
Ein Accessormethode tut genau, was es auf dem Zinn sagt: Greift einige Zustände vom Typ ohne Nebenwirkungen (abgesehen von faul Instanziierung, vielleicht, das ist nicht etwas, das der Anrufer normalerweise etwa würde wissen)
.private int _age;
public int getAge()
{
return _age;
}
Methoden, den Zustand ändern werden sinnvoller angesehen (meiner Meinung nach) als Mutatoren.
Neben googeln und wikipedia, die Java Language Specification zeigt dies als Beispiel ein Zugriffsmethode:
private static int N;
public static int getN() { return N; }
Also, ja, ich würde sagen, es nur den Wert eines Feldes wird. Der Compiler dieser Inline kann es zu einer einfachen Lese Umwandlung, so etwas mehr als das wahrscheinlich kein Accessor ist.
Zugriffsmethoden: getRed, getGreen und GetBlue
in der Regel Diese Methoden Wert zugreifen.
Mutator-Methoden: setRed, setGreen, setBlue
Ein Mutator Wert mutiert
Ich habe immer von der ersten Definition gegangen. Also, in der Regel das gilt nur Getter und Setter. Wenn wir nach der zweiten Methode zu gehen, dann ist es eine weit weniger nützliche Unterscheidung, da, dass fast alle Methoden abdeckt.
Zugriffsmethoden sind für den Zugriff Felder eines Objekts verwendet. So Getter und Setter sind beide Zugriffsmethoden. Observer Methode ist die richtige Bezeichnung für ein Verfahren, das eine allgemeine Betrachtung über ein Objekt macht, ohne von außen beobachtbaren Nebenwirkungen zu verursachen. Ein Verfahren, dessen Hauptzweck ist, Nebenwirkungen zu verursachen, ist ein Mutatormethode . Daher Setter sind ein Beispiel ein Mutatormethode. Für eine gute Ingenieurpraxis sollten öffentliche Setter vermieden werden, weil sie es für eine Klasse unmöglich machen zu erzwingen Invarianten auf seine Daten. Verletzen sie die Abstraktion Barriere, die eine Klasse sollte normalerweise erzwingen
Es ist gut, in der Lage sein Getter und Setter in technischen Gespräch zu unterscheiden. Accessor
Methoden sind Partner Methoden modifier
. Accessor
s lesen, den Zustand eines Objekts (getA()
), während modifier
s den Zustand (setA(Object)
) schreiben.
Ein Verfahren, das der Zugriff ermöglicht (kann ‚Lesezugriff‘ sein oder ‚Schreibzugriff‘) an die Interna eines Objekts ist eine ‚Zugriffsmethode‘.
Die Autoren hier sicherlich verwendet es auf diese Weise:
Ich denke, der Begriff von Common Lisp stammen kann (nicht alles?) - mit setf den Wert von Zugriffsschlitzen zu modifizieren
.