Seite 1 von 1
Naming convention für abstrakte Klasse bzw. Interface
Verfasst: Sa Feb 09, 2013 5:03 pm
von Glocke
Hi,
im Grunde kann ich ja mit C++ ein Interface bzw. eine abstrakte Klasse erzeugen, denn:
Code: Alles auswählen
class Interface {
public:
virtual void foo() = 0;
};
int main() {
Interface i;
}
interface.cpp: In Funktion »int main()«:
interface.cpp:7:15: Fehler: Variable »i« kann nicht als vom abstrakten Typ »Interface« deklariert werden
interface.cpp:1:7: Anmerkung: denn die folgenden virtuellen Funktionen sind rein innerhalb »Interface«:
interface.cpp:3:22: Anmerkung: virtual void Interface::foo()
Nur was ist die richtige Art und Weise eine Interface-Klasse (oder eigentlich eine abstrake Klasse - sagt ja auch der Compiler) zu benennen?
IExample oder
ExampleInterface oder noch anders?
LG Glocke
Re: Naming convention für abstrakte Klasse bzw. Interface
Verfasst: Sa Feb 09, 2013 5:18 pm
von fat-lobyte
Eine Abstrakte Klasse ist ... naja, abstrakt. Das bedeutet, dass du eben *keine* Instanz dieser Klasse erstellen kannst. Das ist eigentlich sogar der Sinn davon.
Du kannst nur Zeiger oder Referenzen in diesem Typ haben, und du kannst sie nur mit Variablen initialisieren, dessen Klasse von diesem Interface abgeleitet ist.
Oder gehts hier nur um die Benennung?
Re: Naming convention für abstrakte Klasse bzw. Interface
Verfasst: Sa Feb 09, 2013 5:26 pm
von darksider3
fat-lobyte hat geschrieben:
Oder gehts hier nur um die Benennung?
Sieht so aus.
Glocke hat geschrieben:Nur was ist die richtige Art und Weise eine Interface-Klasse (oder eigentlich eine abstrake Klasse - sagt ja auch der Compiler) zu benennen? IExample oder ExampleInterface oder noch anders?
Ja auf jeden fall^^
Naja, Abstrakte Klassen sind ja im Grunde Klassen, welche bestimmte Grundlegende Funktionen erstellen, welche aber nicht genutzt werden sollen. Jedenfalls nicht direkt. Deswegen erstellt man Abgeleitete Klassen - und natürlich auch, um die Funktionen&Variablen zu Importieren.
Back to Topic: Abstrakten Klassen solltest du namen wie BExampleClass oder bExampleClass geben, das b stell ich immer für Basis Funktionen davor. Also im Endeffekt:
Klassen arten:
Packet-Teile(Abgeleitete),Basis Klassen(Von denen Abgeleitet wird) und Nutzer Klassen. Ich würde dann P=Packet,B=Basis,N=Nutzer davor stellen. So erkennst du später besser, in welchem Kontext diese Stehen. Natürlich war das nur ein Anstoß; Denn jeder benutzt andere Abkürzungen, bzw. jedenfalls viele

EDIT: Nochmal durchgelesen... Du solltest einfach möglichst nicht zwischen deinen Schreibstilen wechseln. Das verwirrt am Ende nur^^
MfG
Re: Naming convention für abstrakte Klasse bzw. Interface
Verfasst: Sa Feb 09, 2013 5:30 pm
von Glocke
darksider3 hat geschrieben:fat-lobyte hat geschrieben:
Oder gehts hier nur um die Benennung?
Sieht so aus.
Siehe Titel. Zugegebenermaßen kann man mein Post auch falsch verstehen ^^
Also: wie soll ich die abstrakten Klassen nun benennen?
LG Glocke
Re: Naming convention für abstrakte Klasse bzw. Interface
Verfasst: Sa Feb 09, 2013 5:33 pm
von nufan
darksider3 hat geschrieben:Naja, Abstrakte Klassen sind ja im Grunde Klassen, welche bestimmte Grundlegende Funktionen erstellen, welche aber nicht genutzt werden sollen. Jedenfalls nicht direkt. Deswegen erstellt man Abgeleitete Klassen - und natürlich auch, um die Funktionen&Variablen zu Importieren.
Back to Topic: Abstrakten Klassen solltest du namen wie BExampleClass oder bExampleClass geben, das b stell ich immer für Basis Funktionen davor. Also im Endeffekt:
Klassen arten:
Packet-Teile(Abgeleitete),Basis Klassen(Von denen Abgeleitet wird) und Nutzer Klassen. Ich würde dann P=Packet,B=Basis,N=Nutzer davor stellen. So erkennst du später besser, in welchem Kontext diese Stehen. Natürlich war das nur ein Anstoß;
Die Benennung finde ich etwas verwirrend ^^ Ob eine Klasse eine Basis ist, sagt nichts darüber aus, ob sie ein Interface ist oder nicht.
darksider3 hat geschrieben:Du solltest einfach möglichst nicht zwischen deinen Schreibstilen wechseln. Das verwirrt am Ende nur^^
Das ist der wichtigste Punkt. Such dir einfach eins den beiden gängigen ("IExample", "ExampleInterface") aus und bleib dabei.
Re: Naming convention für abstrakte Klasse bzw. Interface
Verfasst: Sa Feb 09, 2013 5:36 pm
von darksider3
Lies du doch meinen Beitrag

Aber wenn du es willst:
Basis Klassen mit b(z.b bExampleClass) und für andere suchst du dir abkürzungen aus^^ N=Nutzer..
Oder verdammt nochmal einfach AbstractExampleClass.
dani93 hat geschrieben:Die Benennung finde ich etwas verwirrend ^^ Ob eine Klasse eine Basis ist, sagt nichts darüber aus, ob sie ein Interface ist oder nich
Nein, aber in welchem Kontext sie zu dem Programm steht. Also IbExample wäre Basis-Interface-Example.
Sodass man den Kontext eventuell noch versteht, ohne in die Klasse "hineinzusehen".
Re: Naming convention für abstrakte Klasse bzw. Interface
Verfasst: Sa Feb 09, 2013 5:42 pm
von Fisherman
Also: wie soll ich die abstrakten Klassen nun benennen?
Im Prinzip so wie du es für Richtig hältst ... Suche dir eine passendes Kürzel für deine abstrakten Klassen und verwende sie durchgehend .... Sollte jemand anderes ebenfalls an dem Quellcode arbeiten kannst du ja in eine Datei deine eigene Notation hinterlegen ....
Gruß
Re: Naming convention für abstrakte Klasse bzw. Interface
Verfasst: So Feb 10, 2013 10:03 am
von Xin
Ich sehe keinen Grund, eine Interfaceklasse speziell zu benennen.
Beim Compiler werden alle Operatoren ("Add", "Sub"...) von "Operator" abgeleitet, welche eben auch reichlich pure-virtual-Methoden besitzt. Bei einer anderen Programmiersprache habe ich InputConnector und OutputConnector von - Achtung - Spannung: Connector abgeleitet.
Ich hätte das auch ConnectorInterface nennen könnnen, aber was habe ich davon - außer dass ich mehr tippen müsste!?
Zumal ich äußert selten Klassen habe, die ausschließlich pure-virtual-Methoden haben. Wir programmieren C++, es finden sich fast immer Methoden, die nicht pro abgeleiteter Klasse neu implementiert werden müssen, weil man nur vom Interface ableiten darf. Entsprechend packt man die in die Basisklasse, so dass die Klasse zwar weiterhin abstrakt ist, aber auch Funktionalität besitzt.
Ganz selten habe ich rein abstrakte Klassen. Grundlegende Klassen, die man hier einsortieren könnte, nenne ich Base... So gibt es ein BaseString oder BaseNodes, die selbst aber nie benutzt werden, sondern eher 'intern' für Strings und Nodes, die von den jeweiligen Klassen abgeleitet sind.