C++ immer Klassen oder auch Module?

Gast #5830524
Lesenswert?

Hallo,
In C++ sollte ich da immer alles in ein Klassenkorsett zwängen oder ist 
es auch gängige praxis Funktionen in einem Modul zu definieren und ihre 
Prototypen in einer Header Datei aufzuführen.

Also alles was diesen Header includiert, kann auf die Funktionen im 
Modul zugreifen.

Genauso könnte ich das auch in einer Klasse umsetzen. Klassendeklaration 
und Definition.

Die Frage ist also immer alles in Klassen quetschen oder gehen auch 
Module.
Gast #5830562
Lesenswert?

Der Begriff "Modul" ist in C++ noch in der Ausarbeitung, du meinst 
vermutlich einen Namespace?

Dann ist es Geschmacksache. Leute, die aus der Java-Welt kommen, packen 
alle Funktionen als Memberfunktion in eine Klasse, weil es in Java gar 
keine Funktionen gibt, sondern nur Methoden (der dortige Begriff für 
Memberfunktion).

In C++ gibt es APIs mit beiden Varianten. In der STL sind die 
Algorithmen beispielsweise außerhalb der Klassen implementiert, z.B. 
for_each(...vector...) statt vector::for_each.

Ich persönlich mache es so: In eine Klasse gehört alles, was den Zustand 
der Klasse betrifft, d.h. Funktionen, die Membervariablen ändern oder 
benötigen. In den Namespace kommen Funktionen, die mithilfe der Klasse 
und ihrer Memberfunktionen höhere Aufgaben erledigen können.

Beispiel: Es gibt eine Klasse HTTPClient, die sich um HTTP-Funktionen 
kümmert. Diese sind zustandsbehaftet, z.B. für Authentifizierung und 
Cookies. Eine Funktion "download", die den Inhalt einer URL in eine 
Datei schreibt, würde ich dann nicht in diese Klasse packen, sondern so: 
download(url, file, client = Client()). Das macht auch das Testen 
einfacher, weil "client" in dem Fall ein Interface ist, das beim Testen 
durch einen Stub oder Mock ersetzt werden kann.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren