Interface als Rückgabewert

oraclin25

Erfahrenes Mitglied
Hallo zusammen,

aus gegebenem Anlass muss ich mich sehr viel mit XSOM-Parser-API beschäftigen. All die Methoden der API haben überwiegend Interface als Rückgabewert.

Wenn eine Methode Interface als Rückgabewert hat, hat man ja nicht unbedingt den Einblick was für ein Objekt tatsächlich unter der Haube tatsächlich verbirgt. Sicher ist es nur, dass dieses Objekt bzw. diese Klasse implementiert das Interface.

Dieses Interface implementiert wiederum weitere Interfaces. Ein konkretes Beispiel ist die Methode getResult():
Code:
XSOMParser parser;
...
XSSchemaSet schemaSet = parser.getResult();

Ist es eigentlich normal, dass man einfach mit so einem Objekt arbeitet, wobei man eigentlich nicht weiss was für ein Objekt das ist. Man weiss ja lediglich, dass dieses Objekt das Interface implementiert.

Was meint Ihr? Vielen Dank für Eure Antwort.

Viele Grüße aus Rheinland,

Eure Ratna
 
Ist es eigentlich normal, dass man einfach mit so einem Objekt arbeitet, wobei man eigentlich nicht weiss was für ein Objekt das ist. Man weiss ja lediglich, dass dieses Objekt das Interface implementiert.
Ja, ist normal bzw. nichts Schlechtes.
Wenn es für die Situation Sinn macht (was es sehr oft tut), warum nicht...?
 
Teilweise ist dies sogar wünschenswert, da du dich nur an ein Interface (d. h. öffentliche Attribute und Methoden) bindest und nicht an die eigentliche Implementierung, auf dessen Verhalten oder zusätzliche Methoden du vertraust.

Ein Beispiel für Java:
Java:
ArrayList<String> movies = new ArrayList<>();

// zu bevorzugen!
List<String> movies = new ArrayList<>();
 
Hallo sheel und ComFreek,

danke für die Hilfestellungen. Bin ein Stück schlauer geworden. Habe mich dazu noch ein bisschen dazu gegoogelt:
Ein Vorteil der Interface-Verwendung ist, dass man zur Laufzeit je nachdem welche konkrete Implementierung braucht, die Interface-Variable einfach aufs gewollte Objekt zeigen lassen kann. Stichwort, DB-Treiber..
Habt Ihr noch mehr Vorstellungen, welche Vorteile die Verwendung der Interface als Variable noch bringen kann?

Viele Grüße aus Rheinland,
Eure Ratna
 
Habt Ihr noch mehr Vorstellungen, welche Vorteile die Verwendung der Interface als Variable noch bringen kann?
Mir würde noch einfallen, dass man Interfaces oft auch für Pluginarchitekturen nutzt. Interfaces geben vor, welche Methoden unterstützt werden müssen (d. h. bei Plugins bspw: init(), shutdown(), run()). Um ein Plugin zu schreiben, muss man nun das Interface implementieren und gewährleistet dem ausführenden Programm so, dass alle benötigten Methoden implementiert worden sind. Übrigens geben Interfaces nur Methodennamen vor, aber kein Verhalten ("behavior"). Letzteres ist eher bei (abstrakten) Klassen zu finden, welche teilweise Verhalten per finale Methoden vorgeben können.

Es läuft aber bei allen Argumenten immer auf die Kernprinzipien von Interfaces hinaus:

The protocol is a description of:
1.The messages that are understood by the object.
2.The arguments that these messages may be supplied with.
3.The types of results that these messages return.
4.The invariants that are preserved despite modifications to the state of an object.
5.The exceptional situations that will be required to be handled by clients to the object.
Quelle: Engl. Wikipedia "Protocol (object-oriented programming)": http://en.wikipedia.org/wiki/Protocol_(object-oriented_programming), Lizenz: CC BY-SA 3.0
 
Zurück