Naming convention für abstrakte Klasse bzw. Interface

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Glocke
Beiträge: 332
Registriert: Fr Okt 26, 2012 8:39 am

Naming convention für abstrakte Klasse bzw. Interface

Beitrag von Glocke » Sa Feb 09, 2013 5:03 pm

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

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Naming convention für abstrakte Klasse bzw. Interface

Beitrag von fat-lobyte » Sa Feb 09, 2013 5:18 pm

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?
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
darksider3
Beiträge: 347
Registriert: Fr Sep 14, 2012 6:26 pm
Wohnort: /dev/sda1
Kontaktdaten:

Re: Naming convention für abstrakte Klasse bzw. Interface

Beitrag von darksider3 » Sa Feb 09, 2013 5:26 pm

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 :D
EDIT: Nochmal durchgelesen... Du solltest einfach möglichst nicht zwischen deinen Schreibstilen wechseln. Das verwirrt am Ende nur^^
MfG
effizienz ist, wenn ich ein loch bohre und hinterher mein nachbar auch ein bild aufhängen kann... ^^
Meine Homepage und der Microblog von mir :)
Live Life dont let Life Live You!
Am meisten Aktiv in Webentwicklung und PHP im Wiki

Glocke
Beiträge: 332
Registriert: Fr Okt 26, 2012 8:39 am

Re: Naming convention für abstrakte Klasse bzw. Interface

Beitrag von Glocke » Sa Feb 09, 2013 5:30 pm

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? :lol:

LG Glocke

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Naming convention für abstrakte Klasse bzw. Interface

Beitrag von nufan » Sa Feb 09, 2013 5:33 pm

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.

Benutzeravatar
darksider3
Beiträge: 347
Registriert: Fr Sep 14, 2012 6:26 pm
Wohnort: /dev/sda1
Kontaktdaten:

Re: Naming convention für abstrakte Klasse bzw. Interface

Beitrag von darksider3 » Sa Feb 09, 2013 5:36 pm

Lies du doch meinen Beitrag :mrgreen:
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".
effizienz ist, wenn ich ein loch bohre und hinterher mein nachbar auch ein bild aufhängen kann... ^^
Meine Homepage und der Microblog von mir :)
Live Life dont let Life Live You!
Am meisten Aktiv in Webentwicklung und PHP im Wiki

Benutzeravatar
Fisherman
Beiträge: 84
Registriert: Mi Jun 06, 2012 4:53 am
Wohnort: 127.0.0.1

Re: Naming convention für abstrakte Klasse bzw. Interface

Beitrag von Fisherman » Sa Feb 09, 2013 5:42 pm

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ß
There is no place like 127.0.0.1

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Naming convention für abstrakte Klasse bzw. Interface

Beitrag von Xin » So Feb 10, 2013 10:03 am

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten