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. :)

War es hilfreich?

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. Accessors lesen, den Zustand eines Objekts (getA()), während modifiers 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:

  1. http://www.javaworld.com/article/2073723/core-java/why-getter-and-setter-methods-are-evil.html

  2. http://c2.com/cgi/wiki?AccessorsAreEvil

Ich denke, der Begriff von Common Lisp stammen kann (nicht alles?) - mit setf den Wert von Zugriffsschlitzen zu modifizieren

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top