Was sind Accessor-Methoden?

Accessor-Methoden, auch als Getter- und Setter-Methoden bezeichnet, sind Methoden, die den Zugriff auf Variablen erlauben und dadurch die Möglichkeit bieten, Kontrolle über deren Werte auszuüben.

Das in der objektorientierten Programmierung anzuwendende Geheimnisprinzip und die Datenkapselung erfordern, dass auf Variablen und Methoden einer Klasse nur unter kontrollierten Bedingungen zugegriffen werden darf. Aus diesem Grund werden insbesondere Instanzvariablen häufig private deklariert, sodass sie nur in der deklarierenden Klasse selbst sichtbar sind. Auf diese Weise kann so z.B. gewährleistet werden, dass auch die interne Behandlung der Variablen-Werte selbst nach außen völlig unsichtbar bleiben kann, sodass die jeweiligen Implementierungen beliebig variiert werden können, ohne dass auf den Zugriff Rücksicht genommen werden muss.
Des Weiteren sind Fälle denkbar, in denen vor der Zuweisung eines Wertes an eine Variable zunächst eine Gültigkeitsprüfung erfolgen sollte, um etwa das Setzen unzulässiger oder ungültiger Werte zu vermeiden. Und auch der lesende Zugriff auf Variablen muss kontrollierbar bleiben, z.B. um eine erwartete Formatierung zu gewährleisten.

Selbstverständlich müssen Getter- und Setter-Methoden nur dann implementiert werden, wenn sie auch tatsächlich genutzt werden. Vielmehr kann der Verzicht auf eine Setter-Methode sogar zusätzlich eine Variable vor unqualifiziertem Zugriff schützen.

Die Bezeichner von Accessor-Methoden setzen sich aus einem get für lesende und einem set für schreibende Methoden, gefolgt vom mit großem Anfangsbuchstaben geschriebenen Variablen-Bezeichner zusammen. Diese Konvention sollte unbedingt eingehalten werden, da hierdurch normierte Schnittstellen nach außen zur Verfügung gestellt werden, die ohne umfangreiche Einarbeitung in den Quelltext von vorne herein bekannt sind.

import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;

public class Rechnen {

    public static void main(String[] args) {
        Teiler teiler = new Teiler();
        teiler.setDividend(26);
        teiler.setDivisor(3);
        teiler.teile();
        System.out.println(teiler.getErgebnis());
    }
}

class Teiler {
    private double dividend = 0, divisor = 1, ergebnis;

    public void teile() {
        ergebnis = dividend / divisor;
    }

    public void setDividend(double d) {
        dividend = d;
    }

    public void setDivisor(double d) {
        divisor = 1;
        if (d != 0) {
            divisor = d;
        }
    }

    public double getErgebnis() {
        NumberFormat format = NumberFormat.getNumberInstance(Locale.US);
        ((DecimalFormat) format).applyPattern("#.##");
        String dStr = format.format(new Double(ergebnis));
        return new Double(dStr).doubleValue();
    }
}

Das Beispiel1 demonstriert die Nutzung von Getter- und Setter-Methoden anhand einer einfachen Division.
In der Klasse Teiler werden drei Variablen, davon ein Dividend und ein Divisor als Instanzvariablen private deklariert und mit 0 bzw. 1 initialisiert. Auf alle drei Variablen kann von außerhalb der Klasse nicht direkt zugegriffen werden.
Dies ermöglichen jedoch eine Getter- und zwei Setter-Methoden, die dank ihrer public-Deklaration auch von außerhalb aufgerufen werden können. In setDivisor() wird vor der Zuweisung des als Parameter übergebenen Wertes eine Sicherheitsprüfung durchgeführt, die verhindert, dass der Divisor den Wert 0 annehmen und so eine mathematisch verbotene Division durch 0 erfolgen kann. Der Getter getErgebnis() beschneidet das Ergebnis vor der Rückgabe auf zwei Nachkommastellen.

1) Das Beispiel gibt keine sinnvolle arithmetische Lösung wieder. Auf Sicherheitsabfragen, exakte Rundungen, etc. wurde aus Gründen der Übersichtlichkeit des Beispiel-Codes verzichtet.