Getter- und Setter + final

Dr Franke Ghostwriter
Ich versteh nicht warum in einer Getter- und Setter-Methode eine unveränderliche Variable genutzt wird. Wie bei diesem Beispiel hier:

class Pflanze extends Artikel {
double lagertemperatur;
double liefereLagertemperatur() {
return this.lagertemperatur;
}
void legeLagertemperaturFest(final double temp) {
this.lagertemperatur = temp;
}
}
Wenn ich dafür extra eine neue Methode anlege, wird die Variable doch sicherlich häufiger neue zugewiesen, was durch das final aber nicht möglich ist.
Warum schreibt man den Wert nicht direkt in die Variable lagertemperatur , sondern macht den Umweg über temp?

Vielen Dank für eure Hilfe!
 
wenn wir ein konkretes Objekt der Klasse Planze betrachten (nehmen wir mal die "Rose" an), so hat diese veränderliche und nicht veränderliche Attributwerte. Um bei der Rose zu bleiben: Die Lagertemparatur von 21,4 grad bleibt immer gleich und ändert sich im Laufe des Objektlebens nicht. Deswegen wird die Lagertemparatur mit final initialisiert. Weiteres Beispiel wäre die Rechnungsnummer einer Rechnung. Diese darf sich ebenfalls nicht verändern und wird deswegen mit final initialisiert.
Veränderliche Attributwerte, wie zum Beispiel preis oder beliebtheitsgrad der Rose ändern sich im Laufe des Objektlebens und müssen verändert werden können. Somit dürfen diese nicht mit final initialisiert werden.

Das die Werte nicht direkt dem Objekt zugewiesen werden, sondern über eine Methode, liegt soweit ich weiß an der Vermeidung von doppelten Quellcode. Weiß im Moment noch nicht, ob es andere, bessere Gründe für die Bevorzugung der Methode gegenüber der direktzuweisung gibt.

Ein Beispiel hier:

rose.legeEigenschaftenFest (2.50, 5, 21.5, 4)

ersetzt den folgenden Quellcode der bei jedem neuem Objekt erneut geschrieben werden muss:

rose.preis = 2.50;
rose.beliebtheitsgrad = 5;
rose.lagertemperatur = 21.5;
rose.anzahlDerBlätter = 4;

Dafür muss halt nur einmal die Methode legeEigenschaftenFest angelegt werden.

Ich hoffe, ich konnte helfen.

Gruß

Daniel
 
Ich versteh nicht warum in einer Getter- und Setter-Methode eine unveränderliche Variable genutzt wird. Wie bei diesem Beispiel hier:

class Pflanze extends Artikel {
double lagertemperatur;
double liefereLagertemperatur() {
return this.lagertemperatur;
}
void legeLagertemperaturFest(final double temp) {
this.lagertemperatur = temp;
}
}

Der Zweck erschliesst sich in späteren KE, wenn es um Zugriffberechtigungen geht. Meist legt man die Attribute als privat fest, weil man nicht will, dass "jeder" darauf Zugriff hat. Dann können die Attribute nur noch mit eben diesen Setttermethoden geändert werden. Oder man eben nur Lesezugriff über Gettermethoden hat. Denkbar ist auch, gar keine Settermethoden anzubieten, wenn Objektvariablen als "final" gewünscht und deklariert sind.
Dort kann man dann den Zugriff nochmals spezifizieren, z.B. welche Vorbedingungen erfüllt sein müssen, um das Attibut ändern zu dürfen, (z.B. willst du ja nicht, dass jemand die Lagertemperatur auf -20 grad ändert. Das überlebt ja deine spezielle Pflanze (Objekt) vermutlich nicht).

Einen Zwang, die Variable in der Methode als final zu deklarieren gibt es nicht, allerdings vermeidet man damit, dass man die in Parametern übergebenen Werte im Laufe einer Methode verändert. Es ist im Allgemeinen nicht sonderlich geschickt, den Wert eines Parameters zu verändern. Wenn man den Parameter als final deklariert, kann einem das nicht mal ausversehen passieren. Allerdings ist das vorgehen nicht unbedingt weit verbreitet, aber schaden tut es eben auch nicht.
Bsp.:

// Die Methode berechnet die Summe der ersten n natürlichen Zahlen
publich void sum(int n) {
int sum = 0;
while (n > 0) {
sum += n;
n--;
}
System.out.println("Die Summe der ersten " + n +
" natürlichen Zahlen beträgt " + sum + ".");
}
Da ist das n, welches gedruckt wird schon lange nicht mehr das selbe wie das am Amfang als Parameter übergebene.
Schöne Grüße
Christine
 
Der Zweck erschliesst sich in späteren KE, wenn es um Zugriffberechtigungen geht. Meist legt man die Attribute als privat fest, weil man nicht will, dass "jeder" darauf Zugriff hat. Dann können die Attribute nur noch mit eben diesen Setttermethoden geändert werden. Oder man eben nur Lesezugriff über Gettermethoden hat. Denkbar ist auch, gar keine Settermethoden anzubieten, wenn Objektvariablen als "final" gewünscht und deklariert sind.
Dort kann man dann den Zugriff nochmals spezifizieren, z.B. welche Vorbedingungen erfüllt sein müssen, um das Attibut ändern zu dürfen, (z.B. willst du ja nicht, dass jemand die Lagertemperatur auf -20 grad ändert. Das überlebt ja deine spezielle Pflanze (Objekt) vermutlich nicht).

Einen Zwang, die Variable in der Methode als final zu deklarieren gibt es nicht, allerdings vermeidet man damit, dass man die in Parametern übergebenen Werte im Laufe einer Methode verändert. Es ist im Allgemeinen nicht sonderlich geschickt, den Wert eines Parameters zu verändern. Wenn man den Parameter als final deklariert, kann einem das nicht mal ausversehen passieren. Allerdings ist das vorgehen nicht unbedingt weit verbreitet, aber schaden tut es eben auch nicht.
Bsp.:

// Die Methode berechnet die Summe der ersten n natürlichen Zahlen
publich void sum(int n) {
int sum = 0;
while (n > 0) {
sum += n;
n--;
}
System.out.println("Die Summe der ersten " + n +
" natürlichen Zahlen beträgt " + sum + ".");
}
Da ist das n, welches gedruckt wird schon lange nicht mehr das selbe wie das am Amfang als Parameter übergebene.
Schöne Grüße
Christine

Dank Dir... mir hast du mit deiner erweiternden Erklärung auch eine neue Sicht für das Verständnis der Methodendeklaration eröffnet.
 
Oben