Frage zu Schnittstellen (lose Kopplung)

Blagg Dogg

Mitglied
hi,

ich habe eine generelle frage zu schnittstellen: aus dem prinzip der losen kopplung geht ja hervor, dass man auf andere packages nur über schnittstellen, also interfaces, zugreift und gar keine konkreten klassen daraus kennt. aber wie setzt man dies um? man kann doch auf einem interface gar keine methoden aufrufen, sondern muss doch auch die klasse(n) kennen, die dieses interface implementieren.

hab ich ein denkfehler oder wie macht man das?

danke schonmal 🙂
 
Denkfehler!

Du musst die Implemnetierung(en) nicht kennen, solange die Instanzen "woanders" (Factory, DI, etc. pp.) erzeugt werden.
 
evtl. wirds am Anfang einmal konkret, etwa mit der Wahl der Factory,
danach gibt es aber das charmante Spiel, dass ein Objekt A, übers Interface bekannt, ein neues Objekt B zurückgibt, auch wieder nur über Interface, usw.
 
Entweder über eine Factory, also eine Klasse, die dir ein Objekt für das Interface zurück gibt, oder Frameworks die das für dich machen ;-)

Generell, bei der Erstellung, kennst du die spezielle Implementierung, aber ansonsten nimmst du nur das Interface.

z.B.

Java:
List myList=new ArrayList(); //hier bei der erstellung bekannt

public void doSomething(List myList){ //hier beim tuen ist die implementierung unbekannt
   //...
}
 
Hibernate kommt irgendwie mit einem SessionFactory-Objekt bei dir an, Interface SessionFactory,
damit kann man sich eine Session für DB-Zugriff erstellen, ein Interface,
die Session liefert bei Bedarf eine Transaction, falls du das kennst, ein Interface,
mit der Session kann man Query-Objekte für einzelne Datenbankabfragen erstellen, Interface,
Ergebnislisten sind naheliegend vom Typ List, Interface
usw.

JDBC ähnlich mit Connection, Statement, Transaction, ResultSet, ResultSetMetaData usw.


neben DB ist Web immer das andere große Thema, da macht jedes bessere Framework sicher auch sein eigenes Ding,
allgemein ist HttpServletRequest etwas spezieller als nur ServletRequest, aber auch ein Interface,
liefert die Session, den ApplicationContext, was immer man braucht

bei Swing mit Massen an Button, ComboBox und Co. wäre es eher lästig, noch lauter Interface zu definieren,
mit TableModel, ActionListener usw. kann man aber auch wieder per Interface umgehen
 

Zurück
Oben