Forum: PC-Programmierung C++ immer Klassen oder auch Module?


von Peter (Gast)


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.

von rme (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.