Die meisten OO-Sprachen präfixieren ihre Schnittstellennamen mit einem großen I, warum macht Java das nicht? Was war der Grund, diese Konvention nicht zu befolgen?
Um zu verdeutlichen, was ich meine: Wenn ich eine Benutzerschnittstelle und eine Benutzerimplementierung haben möchte, hätte ich in Java zwei Möglichkeiten:
- Klasse = Benutzer, Schnittstelle = BenutzerSchnittstelle
- Klasse = BenutzerImpl, Schnittstelle = Benutzer
Während in den meisten Sprachen:
Klasse = Benutzer, Schnittstelle = IBenutzer
Jetzt könnte man argumentieren, dass man immer einen aussagekräftigeren Namen für die Benutzerimplementierung wählen könnte und das Problem verschwindet, aber Java drängt auf einen POJO-Ansatz und die meisten IOC-Container verwenden umfangreich DynamicProxies. Diese beiden Dinge zusammen bedeuten, dass Sie viele Schnittstellen mit einer einzigen POJO-Implementierung haben werden.
Also, meine Frage kommt letztlich darauf hinaus: "Ist es sinnvoll, der breiteren Schnittstellennamenskonvention zu folgen, insbesondere angesichts der Richtung, in die Java-Frameworks zu gehen scheinen?"
70 Stimmen
"Wo in den meisten Sprachen"? Welche Sprachen außer den .Net-Sprachen?
0 Stimmen
Nicht nur die .NET-Sprachen; C++ ist eine verwendbare .NET-Sprache und hat nicht per se Schnittstellen (abstrakte Basisklassen können mit etwas Implementierung geliefert werden). Kommt diese Frage letztendlich darauf an, "Warum ist Java nicht wie C#?"?
0 Stimmen
Nein, die Frage basiert auf Java, aber es handelt sich wirklich um eine Frage zu Namenskonventionen für Schnittstellen und warum einige Sprachen sich entscheiden, Dinge auf bestimmte Weisen zu tun.
3 Stimmen
Verschiedene Sprachgemeinschaften haben unterschiedliche Namenskonventionen, und das ist schon seit langer, langer Zeit so. Die Herkunft der Namenskonventionen herauszufinden, ist manchmal im Wesentlichen volkskundliche Forschung.
5 Stimmen
Eclipse ist ein signifikanter Ausreißer, der Java mit IFoo-Stil-Namensgebung verwendet. wiki.eclipse.org/Naming_Conventions
0 Stimmen
Außer .NET verwendet auch Adobe Flash/Flex die IFoo-Namenskonvention.
2 Stimmen
Vor den .NET-Versionen war es üblich, COM-Schnittstellen mit einem I-Präfix zu benennen, z.B. IUnknown, IStream. In C++ war es üblich, IStream* und ähnliches zu haben, wenn eine Verbindung zu COM hergestellt wurde. Es scheint eine natürliche Erweiterung des C-Präfixes für Klassen zu sein, obwohl es interessant ist, dass .NET Klassenpräfixe aufgegeben hat. Delphi hat dieselbe Konvention sowohl für eigene Schnittstellen als auch für die Verwendung von COM-Schnittstellen verwendet. Persönlich stört mich die Konvention nicht. Die Frage des OP hier deutet auf einige der Frustrationen mit den Java-Schnittstellennamenskonventionen hin; Ich wünschte, es hätte einen Standard gegeben.
3 Stimmen
Wenn Sie sich die Namen der Schnittstellen im Android SDK (Java auch) ansehen, werden Sie feststellen, dass sie die Konvention verwendet haben, das Wort "Interface" am Ende eines Schnittstellennamens zu haben, wie
NetworkInterface
,DialogInterface
, usw.35 Stimmen
Wie kann diese Frage als "nicht konstruktiv" geschlossen werden, wenn sie so beliebt ist und für so viele Menschen interessant ist?
2 Stimmen
Weil es keine richtige Antwort hat. Ich habe es gestellt, bevor SO so streng war, welche Art von Fragen es akzeptiert.
1 Stimmen
Ich respektiere, dass du selbst Wert darauf legst, dass die Frage geschlossen wird. Es handelt sich jedoch tatsächlich um eine beantwortbare Frage, wenn sie umformuliert wird. Auch wenn sie geschlossen ist, wird sie zugelassen, um andere (möglicherweise besser formulierte) nicht geschlossene Fragen als Duplikate zu kennzeichnen. Das ergibt einfach keinen Sinn. Basierend auf den Java-Bibliotheken, wenn sie ihrer eigenen Konvention folgen würden, würde es Interface[deinInterfaceName] sein; basierend auf
Abstract...
.0 Stimmen
Der beste Rat, den ich bisher bezüglich der Benennungskonvention von Klassen und Schnittstellen gefunden habe, lautet: "Schnittstellennamen sollten immer ein Adjektiv (wo immer möglich) sein, das das erzwungene Verhalten der Klasse (Nomen) beschreibt!" wie hier erwähnt - iwombat.com/standards/…
0 Stimmen
Ich verwende die hier vorgestellten Konventionen. howtodoinjava.com/java/basics/java-naming-conventions
0 Stimmen
@DavidLeonard Das ist wahrscheinlich der Grund, warum Eclipse ein zum Scheitern verurteiltes Produkt ist ;)