Hi
Noch eine allgemeine OOP-Frage, die ich mal von http://www.java-forum.org/de/topic80048_wie-tief-darf-eine-vererbungshierarchie-sein.html abzweige, weil sie damit eigentlich nichts mehr zu tun hat. (Falls ein Mod das anders sieht, kann er die Threads wieder zusammenführen).
Im Interface "List" der Java Collections API werden alle Methoden zusammengefasst, die eine "List" anbietet. Einige dieser Methoden sind gekennzeichnet als "optional operation". Wenn man genau hinsieht, stellt man fest, dass im wesentlichen die Methoden "optional" sind, die die Liste verändern. (Ähnlich ist es bei anderen Collections-Interfaces - List ist nur ein Beispiel).
Wäre es - theoretisch, aus OOP-Design-Sicht - nicht sinnvoller, ein Interface "UnmodifiableList" zu erstellen, das alle Methoden anbietet, die in List jetzt NICHT-Optional sind, und zusätzlich ein Interface "List extends UnmodifiableList", in dem die optionalen Operationen mit drinstehen?
Ein Interface erfüllt ja gerade den Zweck vorzugeben, welche Methoden ein Objekt anbietet, wenn seine Klasse dieses Interface implementiert. Dann DOCH wieder bei einigen Methoden eine "UnsupportedOperationException" zu werfen widerspricht ja eigentlich dem Sinn eines Interfaces....
Beim Beispiel "List" könnte man vielleicht sagen, dass das Altlasten aus Java 1.0 sind. Aber speziell für die Entwicklung neuer APIs stellt sich doch die Frage: Sollte man Interfaces so feingranualar machen, dass man NIE irgendwo eine "UnsupportedOperationException" werfen muss? Welche Argumentation könnte es geben, um zu rechtfertigen, dass man bei einer Methode eine "UnsupportedOperationException" wirft oder werfen darf? (Oder suggestiv gefragt: Warum sollte man diese Exception nicht bei ALLEN Methoden werfen können?)
Noch eine allgemeine OOP-Frage, die ich mal von http://www.java-forum.org/de/topic80048_wie-tief-darf-eine-vererbungshierarchie-sein.html abzweige, weil sie damit eigentlich nichts mehr zu tun hat. (Falls ein Mod das anders sieht, kann er die Threads wieder zusammenführen).
Im Interface "List" der Java Collections API werden alle Methoden zusammengefasst, die eine "List" anbietet. Einige dieser Methoden sind gekennzeichnet als "optional operation". Wenn man genau hinsieht, stellt man fest, dass im wesentlichen die Methoden "optional" sind, die die Liste verändern. (Ähnlich ist es bei anderen Collections-Interfaces - List ist nur ein Beispiel).
Wäre es - theoretisch, aus OOP-Design-Sicht - nicht sinnvoller, ein Interface "UnmodifiableList" zu erstellen, das alle Methoden anbietet, die in List jetzt NICHT-Optional sind, und zusätzlich ein Interface "List extends UnmodifiableList", in dem die optionalen Operationen mit drinstehen?
Ein Interface erfüllt ja gerade den Zweck vorzugeben, welche Methoden ein Objekt anbietet, wenn seine Klasse dieses Interface implementiert. Dann DOCH wieder bei einigen Methoden eine "UnsupportedOperationException" zu werfen widerspricht ja eigentlich dem Sinn eines Interfaces....
Beim Beispiel "List" könnte man vielleicht sagen, dass das Altlasten aus Java 1.0 sind. Aber speziell für die Entwicklung neuer APIs stellt sich doch die Frage: Sollte man Interfaces so feingranualar machen, dass man NIE irgendwo eine "UnsupportedOperationException" werfen muss? Welche Argumentation könnte es geben, um zu rechtfertigen, dass man bei einer Methode eine "UnsupportedOperationException" wirft oder werfen darf? (Oder suggestiv gefragt: Warum sollte man diese Exception nicht bei ALLEN Methoden werfen können?)