Wozu braucht man ein Interface? (OOP)

daddz

Mitglied
Ja ich wollt mal wissen wozu man ein Interface braucht beim OOP. Ich hab keine verständliche Erklärung gefunden! (zumindest für normalsterbliche ;) ) Ich hoffe ihr könnt ein bisschen Licht ins Dunkel bringen!
Danke schonmal!

greetz
daddz
 
Was verstehst Du denn unter "Interface beim OOP"?
Also ich programmiere grundsätzlich nur mit 'nem Editor!

redlama
 
Ich denke er meinte die Object-Interfaces die genutzt werden um mit dem Object zu kommunizieren. Damals bei Pascal (lang, lang ist's her) hat man das glaub ich Methoden genannt.
 
Interface ist englisch und heißt Schnittstelle.
Im Gegensatz zu Klassen sind Schnittstellen nicht instanzierbar.
Neue Klassen (und auch neue Schnittstellen) können beliebig viele Schnittstellen implementieren (implements), während man nur von einer Klasse erben (extends) kann.
Schnittstellen garantieren nicht Funktionionalität, sondern nur, dass es bestimmte Methoden (Schnittstellen) an einer Klasse gibt, nicht deren Inhalt. Schnittstellen enthalten also nur Methodendeklarationen und keinen eigentlichen Code. Was an einer bestimmten Schnittstelle passiert muss in der implementierenden Klasse definiert werden.
Das einzige, was sie mit abstrakten Klassen gemeinsam haben ist, dass sie nicht instanziiert werden können, also man kann mit new kein Objekt einer bestimmten Schnittstelle erzeugen. Ein Objekt kann jedoch vom Typ eines bestimmten Interface sein und stellt somit dessen Methoden zur Verfügung.

Interfaces in PHP5 (engl.)

Gruß hpvw
 
Das ist doch mal eine verständliche Antwort! Danke...aber wo könnte ich zum Beispiel ein Interface gebrauchen?

greetz
daddz
 
Offen gestanden ist der Sinn eines Interface in PHP nur halb so sinnvoll, wie in "wirklich" objektorientierten Programmiersprachen. Java beipielsweise ist sehr streng, wenn es um die Klassen und Typen geht. PHP's automatische Typkonvertierung nimmt den interface's den programmiertechnisch relevanten Sinn. Du kannst die Methoden auch einfach so implementieren und wenn sie vorhanden sind, werden sie halt angesprochen. Das implementieren eines Interface erzwingt, dass die Methoden in der implementierenden Klasse vorhanden sind. Somit zwingst Du Dich durch Verwendung von interface's selbst sauberer zu programmieren.
Wie in dem verlinkten Beispiel können so nur in Teilen vergleichbare Klassen als ein Typ an eine Funktion übergeben werden. Der gemeinsame Typ ist das Zugmittel, unabhängig davon, ob es sich um ein Tier, genauer ein Huftier, oder einen Traktor handelt.
Scheinbar kann man sich in PHP5 selbst zu eine ordentlichen Programmierung, wie in Java, zwingen, indem man type hinting verwendet. Ausprobiert habe ich das jedoch noch nicht.

Ein typisches Interface ist der Iterator. Unabhängig von der Klasse (z.B. eine Liste, eine Baumstruktur, ein Array, ein Warenkorb, Buchseiten, also alles, was sich aus mehr als einem Element zusammensetzt) müssen Methoden, wie hasNext() und getNext() implementiert werden. So kann sichergestellt werden, dass man in einem Programm eine Baumstruktur genauso abfragen kann, wie eine Liste, ohne das die eine Klasse von der anderen erben muss. Die implementation der getNext()-Methode muss dann sicherstellen, dass die Elemente in einer sinnvollen Reihenfolge ausgegeben werden.

Ein weiteres Beipiel aus Java ist das interface Comparable. Übertragen auf PHP würde [phpf]usort[/phpf] anders aussehen. Eine Vergleichsfunktion würde in den Elementen des Arrays selbst implementiert werden und nicht "extern" an [phpf]usort[/phpf] übergeben. Das Array dürfte ausschließlich Objekte vom Typ Comparable enthalten.

Vielleicht macht dies die interface's noch ein bisschen klarer, ansonsten weiterfragen!

Gruß hpvw
 
Ahhh...das Interface schreibt also vor welche Methoden in der Klasse sein müssen bei der sie implementiert ist soweit ich das verstanden habe...ist das richtig so? Oder hab ich es immer noch nicht verstanden?

greetz
daddz
 
Zurück