Was sind Accessor-Methoden?
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.
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.