Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich lese gerade das Buch "Java und XML" von Scholz & Niedermeier. :rtfm:
Darin steht "gegen ein Interface programmieren "oder "gegen eine konkrete Klasse programmieren".
Was meinen die Autoren mit "gegen ... programmieren"?
Ich kann mir darunter nichts vorstellen. ???:L
Ich vermute mal die meinen ein Interface oder Klasse implementieren / abgleiten oder so Programmieren, dass deine Klasse von dem Interface oder der Klasse genutzt werden kann.
Gegen ein Interface programmieren bedeutet, dass du, wenn eine Klasse ein Interface implementiert, du normal nicht gegen die konkrete Implementierung sondern gegen das Interface arbeitest.
Java:
// So!
List foo = new ArrayList();
// Statt so!
ArrayList foo = new ArrayList();
...typische Java-API's bestehen meist aus abstrakten Elementen...
Das allein macht für den normalen Gebrauch nicht viel aus, denn Sie können natürlich gegen ein Interface genauso programmieren wie gegen eine konkrete Klasse.
Gegen ein Interface programmieren bedeutet, dass du, wenn eine Klasse ein Interface implementiert, du normal nicht gegen die konkrete Implementierung sondern gegen das Interface arbeitest.
weiß grad nicht wie man das am besten "übersetzt".
Ich würde das mal als eine Referenz bzw. eine Verknüpfung über ein Interface oder eine konkrete Klasse herstellen.
Beispiel: Es existiert ein Interface Haustier, welches von der konkreten Klasse Hund implementiert wird.
Gegen ein Interface programmieren:
Java:
Haustier tier = new Hund();
Gegen eine konkrete Klasse programmieren:
Java:
Hund tier = new Hund();
Sofern in einem Kontext das Interface ausreichend ist, sollte man nach dem Minimalprinzip gegen das Interface programmieren.
Das Interface ist ja nicht die Implementierung und die Implementierung ist nicht das Interface. Die Implementierung ist eine Möglichkeit eines Interfaces. Ein Interface darf aber beliebig viele Implementierungen haben.
Java:
List foo = new ArrayList();
List foo = new LinkedList();
List foo = new SomeOtherListImpl();
Der Vorteil ich kann Implementierungen irgendwo austauschen ohne überall die Klasse wieder auszutauschen, weil ansonsten nur gegen das Interface programmiert wurde. Das Interface bietet eventuell nicht alle Funktionen der einzelnen Implementierungen, aber alle Implementierungen bieten IMMER! alle Methoden des Interfaces.
Ganz wie Noctarius sagt... aber "gegen etwas" klingt dabei sehr abwertend. Es bedeutet nichts weiter, als das man ausschliesslich die Methoden und Konstanten des Interfaces zur Verfügung hat, während die implementierende konkrete Klasse noch andere Dinge zur Verfügung stellt en kann, die aber im Zweifelsfall nichts mehr mit dem Interface zu tun haben.
Auffällig wird das z.B. bei einem in dieser Hinsicht komplett verunglücktem AWT nebst allem, was darauf aufbaut oder überall dort, wo z.B. [c]String[/c] statt [c]CharSequence[/c] oder kurz eine konkrete Klasse statt ein Interface als Argument erwartet wird. Hätte man dort von Anfang an die Interfaces verwendet, müsste man sich heute weniger Gedanken um "Vererbung oder Delegation" machen.
Java:
interface Interface
{
/* public abstract */ void doSomething();
}
class ImplOfInterface
implements Interface
{
public void doSomething()
{
// DO SOMETHING, CAUSE YOU HAVE TO! ;)
}
}
MAW.: Die Implementierung ist nicht das Interface sondern implementiert es nur. Ein Interface selber bietet keine konkreten (ausführbaren) Methoden an.