"Programming against the interface" sinnvoll?

Status
Nicht offen für weitere Antworten.

TSH

Bekanntes Mitglied
Was meint Ihr, ist es sinnvoll für jede Klasse erstmal ein Interface zu definieren, um dann dagegen zu programmieren? Falls man es später mal austauschen möchte?

Viele Leute finden das ja besonders elegant und man ist flexibel und kann die Klassen einfach austauschen. Was aber, wenn man eigentlich überhaupt nicht vor hat die Klassen auszutauschen (oder nur in wenigen Fällen evtl. später mal). Ist es aus pragmatischer Sicht dann nicht besser, gleich gegen die Klassen zu programmieren und die Interfaces weg zu lassen? Ist ja dann Mehraufwand und der Code wird unübersichtlicher.

Wie ist da Eure Meinung?
 

TSH

Bekanntes Mitglied
Was meinst Du mit "Sinn"?

Dann, wenn man auch wirklich von vorne rein verschiedene Klassen hat, die dieses Interface implementieren?
 

Wildcard

Top Contributor
Ein Interface ist besonders nützlich um die Schnittstelle zwischen Modulgrenzen zu beschreiben.
Generell, Programmierung hin zur Schnittstelle ja, ein eigenes Interface für jeden Mist nein.
 

ice-breaker

Top Contributor
Im Grunde programmiert man nur gegen Schnittstellen und keine konkreten Implementierungen, denn auch wenn du nicht vor hast die Klasse irgendwann mal zu ändern, kann es vllt notwendig werden
 

Wildcard

Top Contributor
Das 'nur' würde ich vorsichtig betrachten. Das würde nämlich bedeuten das du für jede Klasse ein Interface hast und das ist definitiv nicht Sinn der Sache. Die Kunst ist, die Grenzen richtig zu setzen.
 

MQue

Top Contributor
Hallo,

gibts da ein Beispiel, wie das aussieh, wenn man gegen eine Schnittstelle programmiert,


Das heiß ja quasi, dass ich in die Schnittstelle alles gebe, was die Klassen, die diese Schnittstelle implementieren, benötigen, oder?

lg
 

Rock Lobster

Bekanntes Mitglied
Nein, nur all das, was von außen her benötigt wird. Also alle öffentlichen Methoden, sodaß nach außen hin klar ist, was aufgerufen werden können muß.

Daher ja auch der Name "Schnittstelle". Im Grunde ist das wie, wenn Du bei einem Gebäude die Ein- und Ausgänge definierst. Was innen passiert, geht einen Lieferanten z.B. nix an, aber er muß wissen, wo er sein Material anliefern kann usw.
EDIT: Und dieser "Bauplan" kann dann für mehrere verschiedene Gebäude verwendet werden. Innen drin unterscheiden sie sich dann zum Teil sehr stark, aber die Ein- und Ausgänge sind immer an der gleichen Stelle. Wenn der Lieferant dann sowohl zur Schreinerei als auch zur Metallwerkstatt Sachen liefern muß, dann weiß er gleich, wo er hin muß, weil die Gebäude von außen genau gleich aussehen und die Tore gleich angeordnet sind, und er weiß auch, daß sein LKW in beiden Fällen geeignet ist.

Das ist der Sinn einer Schnittstelle :)
 

Rock Lobster

Bekanntes Mitglied
Naja da gibt's etliche. Schau Dir doch einfach z.B. das "List"-Interface in Java an. Da ist ganz klar definiert, wie man Objekte zur Liste hinzufügen, wieder rausholen und löschen kann.

Aber es gibt einige unterschiedliche Implementierungen, z.B. die ArrayList, die LinkedList, und sicher noch ein paar mehr. Intern funktionieren sie unterschiedlich, d.h. die Art, wie sie Daten speichern und sortieren, ist anders. Aber die Benutzung ist immer gleich, d.h. Du verwendest immer genau dieselben Methoden um Objekte einzufügen oder rauszuholen. Manche haben vielleicht noch zusätzliche Methoden, aber das macht nix, die Grundfunktionalitäten aus dem Interface sind GARANTIERT.

Und wenn einer Dir nun an 'ne Funktion eine Liste übergeben will, und Du einfach nur eine "List" (also das Interface) erwartest, dann kann er selbst entscheiden, ob er Dir eine LinkedList oder eine ArrayList gibt, da es für Deine Funktion keinen Unterschied macht.

Andere Beispiele gibt's bestimmt zuhauf...
 

WieselAc

Top Contributor
In java zum Beispiel das List, Map, Set interface.

Ob du nun bei List eine ArrayList oder LinkedList benutzt ist egal. Alle Listen müssen z.B. Sachen hinzufügen oder entfernen können. Wie der konkrete Implementung aussieht ist dann wurscht.

Und jenachdem was für deinen konkreten Anwendungsfall cleverer (effizienter) erscheint, das bnutzt du dann um deine List zu instanzieren.
 

TSH

Bekanntes Mitglied
Gibt's für die Paketnamen der Interfaces und Klassen eigentlich allgemein gültige Konventionen?

Kommen Interfaces und implementierende Klasse(n) üblicherweise ins gleiche Paket:

com.myapp.gui.window (Interface)
com.myapp.gui.blueWindow (Klasse)
com.myapp.gui.redWindow (Klasse)

Oder macht man zB

com.myapp.gui.* (Klassen) und
com.myapp.gui.interfaces.* (Interfaces)

oder

com.myapp.gui.impl.* (Klassen)und
com.myapp.gui.* (Interfaces)
 
S

SlaterB

Gast
halte dich da im Zweifel an die Java-Bilbilothek:

java.util.List
java.util.ArrayList

aber anderes ist natürlich auch denkbar,


schreibe vor allem Klassen und Interface groß, das ist viel wichtiger als vieles andere..
 

TSH

Bekanntes Mitglied
Also Klassen und Interfaces ins gleiche Paket? (Natürlich schreib ich die groß, war gerade nur ein Versehen)
 
S

SlaterB

Gast
tolle Nachfrage, ich beantworte die jetzt eingeschnappt nicht ;)
lies dir noch mal mein Posting durch und überlege,
ob dessen Aussage
'Klassen und Interfaces ins gleiche Paket'
oder
'Klassen und Interfaces nicht ins gleiche Paket'
ist

Tipp: wenn ich ein Beispiel in meinem Posting hatte (ich kann mich schon kaum mehr erinnern)
dann war das bestimmt von der Sorte, die zu meiner intendierten Aussage passt ;)
 

Rock Lobster

Bekanntes Mitglied
Bei uns in der Firma fangen Interface-Namen oft mit einem "I" an, also würde eine konkrete Klasse vielleicht "ColaDose" heißen, und ein passendes Interface dazu "IGetraenkeDose". Ist jetzt ein dummes Beispiel :D aber mir ist grad nix besseres eingefallen.

Ist halt Geschmacksache, aber sooo schlecht finde ich diese Lösung gar nicht. Manche schreiben vor Klassen auch immer ein "C", also wäre es dann eine "CColaDose" und eine "CFantaDose", aber das find ich häßlich und übertrieben. Interfaces hat man jedoch i.d.R. nicht so viele, und da kann es schon ganz sinnvoll sein, diese durch ein "I" zu kennzeichnen oder so. Ist aber letztendlich jedem selbst überlassen, wie er das in seinem Projekt handhaben möchte....

EDIT: Muß noch dazusagen, daß wir das eigentlich nur bei Interfaces machen, bei denen es nicht gerade offensichtlich ist. Bei einem Listener z.B. finde ich das I unnötig, da Listener meistens im Namen das Wort "Listener" haben und diese grundsätzlich Interfaces sind.
 

byte

Top Contributor
Das finde ich nun die schlechteste Lösung. Entweder immer I als Prefix oder nie. Ich würds weglassen. Vernünftige IDEs bieten einem genug Möglichkeiten, die Dateien zu unterscheiden. Da braucht man nicht noch die Namen verschandeln.
 

Rock Lobster

Bekanntes Mitglied
Naja unter C++ ist das vielleicht sinnvoller, weil es dort eben kein "interface"-Keyword gibt. Könnte mir auch vorstellen, daß dieses I-Prefix noch aus dieser Zeit stammt. Klar, unter Java gibt's eh schon sprachlich die Unterscheidung, und die IDE kann dann einfach ein entsprechendes Icon anzeigen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Threads AudioInputStream separat starten und beenden; parallel programming Allgemeine Java-Themen 2
P Threads- Programming Allgemeine Java-Themen 2
J dynamic programming Allgemeine Java-Themen 4
D Interface, aber die Methoden bleiben teilweise gleich Allgemeine Java-Themen 35
B Leere vererbte Interface-Methoden Allgemeine Java-Themen 8
OnDemand Interface imlementieren Allgemeine Java-Themen 4
Buroto Interface Allgemeine Java-Themen 2
T Komische Zeichen im Zusammenhang mit Serializable interface Allgemeine Java-Themen 13
M Kann man Annotationen auf Klassen einschränken die ein Interface implementieren? Allgemeine Java-Themen 1
H Kombination Interface und Abstrakte Klasse bei Generics Allgemeine Java-Themen 3
B JaxB und @XmlIDREF mit Interface Allgemeine Java-Themen 1
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
P Abstrakte Klassen vs. Interface Allgemeine Java-Themen 4
Kirby.exe Autocloseable Interface Allgemeine Java-Themen 2
T Abgeleitetes Interface public ohne Schlüsselwort "interface"? Allgemeine Java-Themen 3
S static in Interface und Klasse Allgemeine Java-Themen 2
S static methode im Interface Allgemeine Java-Themen 1
S Interface, generischer Datentyp, Exception? Allgemeine Java-Themen 3
B Vererbung Interface und implementierende Klassen Allgemeine Java-Themen 8
A Anonyme Klassen - Interface Allgemeine Java-Themen 5
C Ein Iterator ist eine Implementierung des Interface Iterable? Allgemeine Java-Themen 2
J Generische Interface - Problem Allgemeine Java-Themen 3
mrBrown Namensfindung Fluent-Interface Allgemeine Java-Themen 0
J Logik in Interface Allgemeine Java-Themen 2
N Best Practice Allgemeines Verhalten für ein Interface implementieren? Allgemeine Java-Themen 7
B eigenes Consumer Interface Allgemeine Java-Themen 0
S 2 methoden mit gleichen namen und ein Interface Allgemeine Java-Themen 9
N GUI Interface, swing Allgemeine Java-Themen 7
Thallius Konzeptproblem User-Interface Allgemeine Java-Themen 5
T Interface vs abstract Allgemeine Java-Themen 2
S Klassen Abstract, Interface und ein Chat Tool Allgemeine Java-Themen 1
I Interface Interface / Klasse - wieso Abstract? Allgemeine Java-Themen 13
D generische Interface und konkrete Methode Allgemeine Java-Themen 3
C Klassen Problem mit Funktion einer Generischen Klasse die ein Interface implementiert Allgemeine Java-Themen 0
N Problem mit Generics und Interface Allgemeine Java-Themen 4
D Methode mit optionalen Parametern in Interface Allgemeine Java-Themen 3
T Interface mit generische Typen Allgemeine Java-Themen 5
M Interface einer Library implementieren Allgemeine Java-Themen 3
A Klassen ein Interface aufzwingen Allgemeine Java-Themen 4
Bananabert Interface Custom 'Event' mit Interface Allgemeine Java-Themen 10
J Interface Serializable Methodensignatur Allgemeine Java-Themen 2
J Interface Interface für Framework verwenden Allgemeine Java-Themen 4
F Interface IInterface oder Interface? Allgemeine Java-Themen 3
M Generics (bounded wildcards statt Interface Bezeichnern) -- Sinn oder Unsinn? Allgemeine Java-Themen 2
T Interface Probleme Allgemeine Java-Themen 8
M Queues und Queue Interface Allgemeine Java-Themen 3
I Mehrfaches Implementieren eines generischen Interface Allgemeine Java-Themen 9
W Java Native Interface und "mp3player" Allgemeine Java-Themen 3
M Über Liste verschiendene JComponents mit eigenem implementierten Interface ansprechen Allgemeine Java-Themen 7
P Eclipse Java Native Interface-Problem Allgemeine Java-Themen 8
Z Abstrakte Klassen /Interface Allgemeine Java-Themen 5
pg1337 Interface-Frage Allgemeine Java-Themen 24
S Interface Welchen Interface Stil favorisiert ihr? (usability) Allgemeine Java-Themen 17
faetzminator statische Variablen in Interface - Vererbung? Allgemeine Java-Themen 9
R Implementierung eines Interface durch 2 verschiedene Klassen Allgemeine Java-Themen 6
T OpenOffice Interface Elemente Ein/Ausblenden Allgemeine Java-Themen 5
K Interface Interface comparable machen Allgemeine Java-Themen 9
T Interface > Abstract > Class Allgemeine Java-Themen 11
N Trick für Compilerfehler bei fehlendem Interface Allgemeine Java-Themen 12
X Interface - Klasse einladen Allgemeine Java-Themen 6
G Interface -> InterfaceImplementierung Allgemeine Java-Themen 3
Ark Array durch Interface ersetzen Allgemeine Java-Themen 7
R Interface instanzieren Allgemeine Java-Themen 8
B Frage zu Interface und List Allgemeine Java-Themen 4
KrokoDiehl JNI: native im Interface Allgemeine Java-Themen 4
S normale vererbung als interface Allgemeine Java-Themen 2
E Beispiel für ein möglichst einfaches Interface Allgemeine Java-Themen 22
N Unterschied abstract interface und interface Allgemeine Java-Themen 4
S interface verbung problem Allgemeine Java-Themen 9
S problem programm mit interface: Allgemeine Java-Themen 3
R Vererbung mit Interface und Abstract Allgemeine Java-Themen 3
B Interface und von Thread ableiten Allgemeine Java-Themen 6
R Interface Serializable technische Begrenzung Allgemeine Java-Themen 2
T Interface-Referenz Allgemeine Java-Themen 2
L interface abstrakte klasse Allgemeine Java-Themen 21
S Interface Geschäftslokik & GUI Allgemeine Java-Themen 6
G Interface zwischen 2 Programmierern Allgemeine Java-Themen 10
C Schnittstellen(interface) Allgemeine Java-Themen 9
N List<? implements "Interface"> geht nicht Allgemeine Java-Themen 13
D javadoc interface + implementation + @overrides Allgemeine Java-Themen 16
G Interface oder abstrakte Klasse Allgemeine Java-Themen 4
T Parameter einer Klasse auf Interface prüfen Allgemeine Java-Themen 6
A feststellen, welche Klassen ein Interface implementieren Allgemeine Java-Themen 3
G class, interface, or enum exp? Allgemeine Java-Themen 2
S Interface Klasse überladen. Allgemeine Java-Themen 2
K Inneres Interface äußere Klasse Allgemeine Java-Themen 7
T Frage zu interface und "guter Programmierstil" Allgemeine Java-Themen 4
T Interface "on-the-fly" implementieren? Allgemeine Java-Themen 3
S Frage zu Interface Allgemeine Java-Themen 7
J Objektorientiert - Interface & Klassen Allgemeine Java-Themen 3
G Interface - Klassen implementieren das - Reflection ok? Allgemeine Java-Themen 4
G Interface mehrfach implementieren Allgemeine Java-Themen 5
@ zur Laufzeit Interface aus jar implementieren? Allgemeine Java-Themen 5
A Was ist der genau Sinn eines Interface? Allgemeine Java-Themen 13
E Oberbergriff für class und interface Allgemeine Java-Themen 20
D QuickSort, Interface Allgemeine Java-Themen 2
R Interface für Arithmethik? Allgemeine Java-Themen 3
MQue Interface implementieren Allgemeine Java-Themen 7
P Liste von Klassen die ein Interface implementieren speichern Allgemeine Java-Themen 12
L Interface Frage! Allgemeine Java-Themen 25

Ähnliche Java Themen


Oben