PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP für Fortgeschrittene und Experten (http://www.selfphp.de/forum/forumdisplay.php?f=13)
-   -   Verständnisproblem zu Interface (http://www.selfphp.de/forum/showthread.php?t=22317)

urvater 28.10.2009 16:25:52

Verständnisproblem zu Interface
 
Ich habe da ein kleines Problem den Sinn bzw. die korrekte Benutzung von einem bzw. mehreren Intrefaces zu verstehen.

Wie sie erzeugt, implementiert werden etc. ist mir klar und kann man ja auch überall nachlesen. Irgendwo glaube ich gelesen zu haben, daß man ein Interface als Schnittstelle benutzt.

Zur Zeit hänge ich an dieser Stelle fest: Interface Grundlagen

Kann mir einer hier einmal ein ganz einfaches Beispiel zeigen wie sowas funktioniert? Also die dort genannten Beispiele sind mir schon klar und verständlich. Nur von einer Art Schnittstelle ist für mich dort nichts zu erkennen.

Der einleitende Satz
Zitat:

Interfaces erlauben die Erzeugung von Code, der spezifiziert, welche Methoden eine Klasse implementieren muss, ohne definieren zu müssen, wie diese Methoden behandelt werden.
läßt mich leider am Sinn zweifeln.
Expliziet wohl eher die Aussage "der spezifiziert, welche Methoden eine Klasse implementieren muss,". Für mich klingt das eher etwas nach einer Art Funktionsbeschreibung.

feuervogel 28.10.2009 19:52:16

AW: Verständnisproblem zu Interface
 
aaalso. Bei einem interface werden ja lediglich (public) methoden definiert, also die methoden, die bei einer klasse "von außen" aufgerufen werden können. es werden aber nicht die methoden-körper definiert.

eine klasse, die ein interface implementiert, muss alle methoden, die im interface definiert werden, implementieren (einzige ausnahmen sind abstrakte klassen m.e.).

das ganze nützt nur enig, da man in php keine typen kennt so wie z.B. in java. wenn ich in java einen vogel und einen fisch habe, dann kann ich ein interface Tier definieren:

Interface Tier {
function gibLaut();
}

jedes tier in meiner welt implementiert nun dieses interface:

class Fisch implements Tier {

function gibLaut(){

return "blubb";

}

}

und der Vogel gibt eben "Zwitscher" zurück.

Und jetzt kommen die Schnittstellen ins Spiel. Wenn ich nun eine Liste von Objekten habe, die allesamt Tiere sind, dann weiß ich dass diese Tiere in jedem fall die methode gibLaut() implementiert haben. Tier beschreibt also die methoden, mit denen ich auf Klassen, die Tier implementieren zugreifen kann.

Wenn jetzt noah auf seiner arche sitzt und eine liste mit Tieren hat, müsste der in Java die Typen für die Objekte der liste mit angeben. und obwohl alle objekte einen anderen typ haben (nämlich z.b. vogel oder fisch), haben sie alle das interface Tier implementiert, sind also vom "Supertyp" Tier. Die liste in java sähe dann so aus:

List<Tier> arche = new LinkedList<Tier>();

und könnte fische, vögel, säugetiere usw enthalten.

in php dagegen kann man beim übergeben eines objektes überprüfen, ob das objekt ein gewisses interface implementiert hat und sich dann sicher sein, die darin implementierten methoden aufrufen zu können.

cortex 28.10.2009 19:58:19

AW: Verständnisproblem zu Interface
 
Zitat:

Zitat von urvater (Beitrag 131760)
Irgendwo glaube ich gelesen zu haben, daß man ein Interface als Schnittstelle benutzt.

korrekt - da man so die kommunikation zwischen klassen über (im interface notierte) methoden beschreiben kann. ein gutes beispiel findet sich hier.

Zitat:

Zitat von urvater (Beitrag 131760)
Ich habe da ein kleines Problem den Sinn bzw. die korrekte Benutzung von einem bzw. mehreren Intrefaces zu verstehen.

möglicherweise erwartest du ganz einfach zu viel von einem interface - es soll leute geben, die die dinger für überflüssig halten und lieber auf eine abstrakte klasse zurück greifen, da man mehr machen kann.

eine klasse, die ein (oder mehrere) interface(s) einbindet, muss alle methoden implementieren, die im jeweiligen interface notiert sind. wie die methode arbeitet, interessiert dabei allerdings nicht - hauptsache, die methode taucht in der klasse auf und besitzt dieselbe signatur.

das (verkürzte) beispiel aus dem php-manual:

PHP-Code:

<?php

interface iTemplate
{
    public function 
setVariable$name$var );
    public function 
getHtml$template );
}

class 
BadTemplate implements iTemplate
{

    public function 
setVariable$name$var )
    {
        
// was hier passiert, ist hinsichtl. des interfaces völlig egal
    
}

}

?>

der code produziert einen fatal error, da die klasse BadTemplate nicht alle methoden implementiert, die im interface notiert sind.

cx

urvater 28.10.2009 20:36:20

AW: Verständnisproblem zu Interface
 
Ok, ich glaub jetzt so langsam den Faden dazu gefunden zu haben. Wenn ich richtig für micht persönlich liege, dann kann ich dieses Thema erst einmal weglassen und mich in andere weiter vertiefen.

Ich danke euch alle für die "einfachere" Beschreibung eines Interface und für den Link.


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:22:15 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.