Interface IInterface oder Interface?

F

Firephoenix

Gast
Eine "richtige" Antwort gibt es vermutlich nicht, aber ich hätte gerne mal Argumente für die Bennenungskonventionen von Interfaces und implementierenden Klassen.

In den Eclipse-Conventions wird gefordert, dass jedes Interface mit einem führendem "I" benannt wird.
Auf anderen Seiten habe ich dagegen die Version mit normalen Interfaces gefunden, bei denen die Implementierende Klasse ein -Impl angehängt bekommt (oder direkt anders benannt wird - siehe das Hierachiebeispiel unten).

Ich selber bin Verfechter der "ohne I"-Variante, aber man findet ohne Probleme Argumente für beide Versionen:

Mit I
Pro:
-Interfaces werden hervorgehoben und sind für Entwickler leichter erkennbar
-kein "Impl"-Anhang an implementierenden Klassen mit identischem Namen.
Contra:
-Sucht man in einer API hat man ein Namensraumproblem, eine Persistenzschnittstelle könnte Persitence* oder IPersistence* heißen.
-Ändert man ein Interface in eine abstrakte oder konkrete Klasse führt die Änderung am Namen dazu, dass alle abhängigen Klassen sich ebenfalls ändern müssen.
-Man gibt Implementierungsdetails nach außen weiter.

Ohne I
Pro:
-Leichtes Refactoring in konkrete Klasse möglich ohne den Namen anfassen zu müssen
-Bessere Lesbarkeit (da man nicht dauernd das "I" ablesen muss)
-Sauberere Api (Siehe Gegenbeispiel oben)
Contra:
-Führt teilweise zu "-Impl" Klassenpostfixen
-Man sieht nicht mehr direkt was ein Interface und was eine Klasse ist.

Zu dem -Impl Idiom ist allerdings zu sagen, dass der Fall tatsächlich nur dann eintritt, wenn man eine Klasse benötigt die den identischen Namen wie das Interface bekommen soll.
Der Regelfall dürfte aber eher eine Hierachie sein (Interface List, Klassen LinkedList, AbstractList ....)
Bei einem sauberen Framework sollte der Anwender in der Regel ja nur mit einigen wenigen konkreten Klassen kommunizieren und ansonsten die Interfaces verwenden. Dies wäre ein weiteres Argument die Interfaces "schön" zu benennen und "gebaute" Namen wie das -Impl unter der Haube zu verstecken.

Wie geht ihr denn in euren Projekten damit um?
(Und habe ich irgendwelche Argumente vergessen?)

Gruß
 

Volvagia

Top Contributor
Es gibt noch die Variante das Postfix IF anzuhängen.
Ich schreibe Interface ohne beiden. Einerseits da dann jedes Interface bei I eingeordnet wird und nicht bei den zugehörigen Klassen (ein Grund, warum ich Namen oft umdrehe, z. B. Interface Car, Implementation eines "schnellen" Auto - CarFast oder CarFastImpl), andererseits da ich Interface öfters benutzt als Klassen. Nahezu jedes Objekt wird bei mir gegen das Interface programmiert, da finde ich es sinnvoller die Klassen und nicht die Interface zu markieren. Ich finde es auch beim lesen störend.

Andererseits ist es mir auch oft egal, ob ich ein Interface oder eine Klasse zurückbekomme, mir ist nur wichtig was die jeweiligen Methoden machen. Falls ich z. B. den Renderer einer JTabel-Spalte umschreiben will wäre es mir egal, ob TableColumn nun ein Interface oder eine Klasse ist, Hauptsache sie besitzt eine setCellRenderer-Methode.
 
Zuletzt bearbeitet:
T

trääät

Gast
seit ich mich mit "stark modularisierter programmierung" beschäftige , also wirklich alles irgendwie in interfaces und module aufspalte , habe ich mich zum persönlichen stil hinleiten lassen eher in die richtung ala "List - LinkedList / ArrayList" zu gehen ...

bei mir wäre dann z.b. das interface einfach schlicht "Module" und die entsprechenden module dann mit sprechenden namen ala "ConnectionHandlerModule" ...

das "-Impl" verwende ich persönlich eher nur wenn ich was mit factories mache ... allerdings nicht immer zwangsweise wenn es vom namen her eindeutig wird ...


folgender absatz soll nur gelesenes sinngemäß wiedergeben, jedoch keine eigene meinungsäußerung darstellen

zur grundsätzlichen diskusion "mit I" oder "ohne I" gibt es auch die meinung das "mit I" eher in die richtung C einzuordnen ist ... und da man sich ja in java normalerweise davon abheben will (gibt ja viele schöne beispiele) es halt üblich ist "ohne I" zu verwenden ... dafür aber dann natürlich eher hin zu "-Impl" was so aus sicht der C'ler wieder als "java-macke" bezeichnet wird wie einige Javaraner halt "mit I" als "C'ler-macke" sehen ...

allgemein würde ich sagen : es ist immer eine design-entscheidung des entwickler(-teams) ... feste vorschriften (siehe conventions) gibt es zu diesem speziellen fall eher weniger bis gar nicht
 

tfa

Top Contributor
Das I ist meiner Meinung nach ein Codesmell und hat vor Interface-Namen nichts zu suchen. Das Argument, man erkenne sofort Interfaces, ist erstens wertlos, wenn man eine halbwegs moderne IDE verwendet. Zweitens aus objektorientierter Sicht nutzlos, da es für einen Typ egal sein muss, ob er durch ein Interface, eine abstrakte oder konkrete Klasse definiert wurde. Und drittens widersprüchlich zur Java Standard-API, wo die Konvention das I nicht vorschreibt.
Mich erinnert das auch eher an ein Überbleibsel der glücklicherweise außer Mode gekommenen ungarischen Notation.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
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
T "Programming against the interface" sinnvoll? Allgemeine Java-Themen 18
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
T Instanz einer Interface abgeleiteten Klasse erzeugen Allgemeine Java-Themen 3
F Ein interface und private Methoden? Allgemeine Java-Themen 13
G nichtabstrakte Funktion zu einer Interface hinzufügen Allgemeine Java-Themen 6
minzel Java Native Interface Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben