# Frage zu Schnittstellen (lose Kopplung)



## Blagg Dogg (7. Nov 2012)

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


----------



## maki (7. Nov 2012)

Denkfehler!

Du musst die Implemnetierung(en) nicht kennen, solange die Instanzen "woanders" (Factory, DI, etc. pp.) erzeugt werden.


----------



## SlaterB (7. Nov 2012)

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.


----------



## Blagg Dogg (7. Nov 2012)

verstehe ich nicht, könntest du mir nen kleines beispiel geben?


----------



## TryToHelp (7. Nov 2012)

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.


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

public void doSomething(List myList){ //hier beim tuen ist die implementierung unbekannt
   //...
}
```


----------



## SlaterB (7. Nov 2012)

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


----------

