Hallo zusammen,Die Kernproblematik ist aus meiner Sicht: In Java geht es um eine Objektorientierte Entwicklung. Man soll also mit Objekten arbeiten.
Das static geht aber komplett an diesem Konzept vorbei.
aufgrund des obigen Zitates habe ich mich an eine Passage aus "Effective C++" von Scott Meyers erinnert, die da lautet:
Ziehen Sie nicht befreundete Nichtelementfunktionen den Elementfunktionen vor
Die Erläuterung dazu war (gekürzt) folgende:
Java:
class Browser {
public clearCache();
public clearHistory();
public clearCookies();
}
Sollte man eine Funktion, die alles mit einem Aufruf löscht als Elementfunktion von Browser implementieren oder als "freie" Funktion?
Java:
class Browser {
public clearCache();
public clearHistory();
public clearCookies();
public clearAll(); // Möglichkeit 1
}
// oder
void clearAll(Browser br); // Möglichkeit 2, so in Java nicht möglich!
Sein Tipp ist es, eine Nichtelementfunktion zu implementieren, weil diese die Kapselung erhöht.
Die Argumentation dazu:
Kapselung bedeutet, etwas zu verbergen. Je stärker die Kapselung, desto weniger kann man sehen und je weniger man sehen kann, desto flexibler ist man als Programmierer etwas zu ändern. Das gilt für die mit dem Objekt verknüpften Daten insofern, je weniger Code die Daten sehen kann, desto stärker die Daten gekapselt sind. Deshalb ist eine Nichtelementfunktion vorzuziehen, weil sie nicht die Anzahl der Funktionen erhöht, die Zugriff auf die Daten haben.
Im Gegensatz zu C++ sind in Java ja freie Methoden nicht möglich. Die einzige Möglichkeit wäre es, diese als statische Methoden einer Klasse bereitzustellen. Wo wir wieder hier angekommen sind:
Die Kernproblematik ist aus meiner Sicht: In Java geht es um eine Objektorientierte Entwicklung. Man soll also mit Objekten arbeiten.
Das static geht aber komplett an diesem Konzept vorbei.
Was haltet ihr von dem Gedanken?
Zuletzt bearbeitet: