Weshalb sind GET Methoden in Java Problematisch?

... komplette Frage anzeigen

4 Antworten

Wenn du eine get- und eine set-Methode für eine Variable hast, die beide nix besonderes machen, dann kannst du auch eine public-Variable nutzen - dadurch ist der Code besser lesbar. Wenn du also irgendwas von wegen

private int _zahl;

public void setZahl(int neueZahl) {

  this._zahl = neueZahl;

}

public int getZahl() {

  return this._zahl;

}

schreibst, dann ist das Quatsch, weil man das alles mit einer public-Variable abfrühstücken kann.

Manche Programmierer neigen auch dazu, in get/set-Methoden viel zu viel Code reinzuschreiben und dadurch Seiteneffekte zu erzeugen, das ist ebenfalls Mist. Generell sind get/set-Methoden nicht schlecht, aber man muss sie richtig einsetzen. Wie begründet deine Lehrerin denn, dass get/set-Methoden schlecht sind?

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von DeSantaMichael
20.11.2015, 10:09


Danke für deine Antwort,

Dies Argumentation habe ich auch schon versucht doch sie wurde nicht gutgeheissen. Meine Lehrerin begründet nicht weshalb sie schlecht sind da dies die Aufgabe ist das herauszufinden. Doch bisher war ich mit den Unterlagen als auch in Foren und Google erfolglos eine Begründung anders als diese zu finden.

0
Kommentar von TUrabbIT
20.11.2015, 11:13

wobei durch die Methoden sichergestellt wird, das nicht die variable unkontrolliert geändert wird. wenn der Wert z.B. in bestimmten Grenzen sein muss. Es gehört zum guten Stil Daten Zugriffe nicht unkontrolliert von extern zuzulassen in der OOP

1
Kommentar von nintendoluk
20.11.2015, 11:46

Ich finde es trotzdem besser immer Getter und Setter zu machen, auch wenn diese die Daten nicht anfassen.

Denn falls man dann später doch einmal zB Wertüberprüfungen im Setter einbauen will, kann man das hier ganz einfach machen, während man, falls man noch keinen Setter hat, alle Vorkommnisse der Variable durch den Setter austauschen muss.

1
Kommentar von Unkreatiiiev
20.11.2015, 13:10

Was für ein Mist. Öffentliche Variablen sind maximal in Ordnung, wenn sie als Konstante oder "volatile" gekennzeichnet sind. Andernfalls ist es nicht nur eine Stilvergewaltigung sondern auch komplett unsicher was Threads betrifft.

1

Diese Methoden soll man eigentlich auch verwenden und auf public Variabeln verzichten.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von DeSantaMichael
20.11.2015, 09:50

Vielen Dank für die Schnelle Antwort

Das ist eben das Problem. Aus allen Quellen erfahre ich das die verwendung dieser Methoden vorteilhaft sei. Doch die Person die mich bewertet besteh darauf das sie problematisch sind doch ich kann kein Argument dafür finden.

0

Ich habe soeben herausgefunden weshalb diese vermieden werden sollte. Wenn mann 10 Klassen hat kann nicht herausgefunden werden auf welche diese getMethode nun zugreifft.

Vielen Dank an alle

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von grtgrt
20.11.2015, 10:52

Ok: Vorausgesetzt, diese Klassen sind Teil einer einzigen Vererbungshierarchie. 

Nebenbei: get() und set() Methoden benutzt man vor allem dann, wenn nicht ausgeschlossen werden kann, dass der sie darstellende Code irgendwann mal aus mehr als nur einer einzigen Wertzuweisung bestehen soll (etwa dann, wenn das set() auch Plausibilitätsprüfungen vornehmen sollte).

1
Kommentar von ceevee
20.11.2015, 11:02

Ich kann die Argumentation ehrlich gesagt nicht so ganz nachvollziehen, denn man kann anhand des Objekttyps erkennen, welche Klasse auf den Getter zugreift. Und

"Ich kann meine Klassen so entwerfen, dass Aufgaben, welche nicht lokal gelöst werden können, an Objekte anderer Klassen delegiert werden und vermeide dadurch problematische Get-Methoden"

widerspricht dem Konzept der Datenkapselung (welches eine Grundlage der Objektorientierung ist). 

https://de.wikipedia.org/wiki/Datenkapselung_(Programmierung)

Ist bei deiner Lehrerin in den Klassen alles public, oder wie?

1

Man liest hier teilweise wirklich Schwachsinn.

Getter und Setter sind nicht an sich verwerflich, sollten nur, wenn möglich, vermieden werden. Beispiel:

public final class Counter {

private int var;

void setVar(final int var) {
this.var = va;
}

int getVar() {
return var;
}

public static void main(final String[] args) {
final Counter counter = new Counter();

for (int i = 0; i < 10; i++) {
counter.setVar(counter.getVar() + 1);
}
}

}

Ein Beispiel für eine Unnötige Verwendung von Gettern und Settern. Stattdessen sollte man lieber eine "Businessmethode" benutzen, welche die Aufgabe des Hochzählens übernimmt. Unnötige Zugriffsmöglichkeiten für bessere Kapselung vermeiden!

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?