Frage von DeSantaMichael, 92

Weshalb sind GET Methoden in Java Problematisch?

Ich Besuche zurzeit einen Java Kurs. Ich verstehe soweit das meiste doch unsere Lehrerin besteht darauf das get, set Methoden Problematisch sind und ich sie in meinem Code nicht verwenden sollte. Weshalb sind diese GET & SET Methoden nun Problematisch? Bisher wurde in allen Foren nur gesagt das mann sie eben verwenden soll.

Vielleicht ergibt es im Kontext mehr Sinn. Die Aufgabenstellung ist wie folgt: "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".

Im vorraus Vielen Dank für eure Hilffe!

Antwort
von Suptrx, 92

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

Kommentar von DeSantaMichael ,

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.

Kommentar von Suptrx ,

Rede mal mit einem anderen Informatik Lehrer auf deiner Schule. Bei uns (Q1 Gymnasium Leistungskurs) sind get und set Methoden essenziell!

Kommentar von DeSantaMichael ,

Ich habe es bereits mit anderen Lehrern besprochen die auch der Meinung sind das diese essenziell sind. Doch die Person die uns bewertet behauptet weiterhin das diese Problematisch sind.  Vielleicht macht es im Kontext mehr Sinn. Die Aufgabenstellung ist wie folgt: "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".

Nochmals Vielen Dank für deine Hilfe!

Kommentar von Suptrx ,

Ich weiß leider nicht was im Kopf deines Lehrers vorgeht und ich kenne die Vorschriften nicht. Ich weiß nicht ob der Lehrer das Recht hat, dir die Benutzung dieser Methoden zu verbieten. Wenn du diese Methoden wirklich einbinden willst, frag deinen Lehrer ob er dir diese verbietet. Falls ja sprich mal mit dem Direktor, ob dies legitim ist.

Kommentar von DeSantaMichael ,

Ich werde das versuchen... Doch ich glaube kaum das dies erfolgreich sein wird.

Vielen Dank!

Antwort
von ceevee, 63

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?

Kommentar von DeSantaMichael ,


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.

Kommentar von TUrabbIT ,

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

Kommentar von nintendoluk ,

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.

Kommentar von Unkreatiiiev ,

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.

Antwort
von DeSantaMichael, 70

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

Kommentar von grtgrt ,

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

Kommentar von ceevee ,

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?

Kommentar von DeSantaMichael ,

Dies ist jedenfalls die Antwort die Sie verlangt hat. Ich werde das aber noch mit ihr besprechen da nur Sie diese Meinung vertritt. 

Vielen Dank an alle für die Hilfe / Unterstützung.

Antwort
von Unkreatiiiev, 29

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!

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten