C++ Wie modular ist c++?

  • Ersteller Ersteller Tersus
  • Erstellt am Erstellt am
T

Tersus

Gast
Guten Abend,

ich als Java-Programmierer möchte bald auf C++ umsteigen. Wie modular kann ich eine Software in C++ gestalten? In Java kann ich die Anwendungen in mehrere Dateien zerlegen und bei einem Update, jeweils nur einen Programmteil austauschen. Ich muss nicht die gesamte Anwendung neu kompilieren.

Wie läuft das in C++? Lässt sich dieses ebenso in mehrere Anwendungsbestandteile zerlegen, so dass ich nur einzelne Programmdateien austauschen muss, ohne die gesamte Anwendung neu zu kompilieren?
 
Das geht im Grunde ohne Probleme in C++, dafür unterteilt man den Code in Header (.h) und Sources (.cpp). In den Header kommen Deklarationen, in die Sources Definitionen - solange man nur die Definition ändert, müssen andere Dateien nicht neu kompiliert werden, sondern es wird einfach nur gelinkt.

Eine Ausnahme davon sind Templates, da deren Definition auch im Header sein muss und eine Änderung sich daher auf alle inkludierenden Dateien auswirkt.
 
Wenn du die Programmteile in DLLs zerlegst, dann kannst du die hinterher austauschen. Die einzige Bedingung ist, dass die Schnittstellen gleich bleiben, aber diese Bedingung hast du bei Java ja auch.
 
Was meinst du mit Update? Wenn du in Java alles in eine JAR packst, kannst du auch nicht mehr so einfach updaten.
Das C++-Äquivalent ist eine DLL (bzw. unter Linux *.so).
In C++ gibt es deutlich mehr Fälle, wo durch ein Update eine komplette Neukompilation notwendig wird. Dies kann bspw. der Fall sein, wenn du den Compiler wechselst (Stichwort: Name-Mangling, STL-Kompatibilität).
 
Tersus schrieb:
Guten Abend,

ich als Java-Programmierer möchte bald auf C++ umsteigen. Wie modular kann ich eine Software in C++ gestalten? In Java kann ich die Anwendungen in mehrere Dateien zerlegen und bei einem Update, jeweils nur einen Programmteil austauschen. Ich muss nicht die gesamte Anwendung neu kompilieren.

Wie läuft das in C++? Lässt sich dieses ebenso in mehrere Anwendungsbestandteile zerlegen, so dass ich nur einzelne Programmdateien austauschen muss, ohne die gesamte Anwendung neu zu kompilieren?

Aus dem C++ FQA:

Most kinds of built-in language support for object-oriented programming, including no such support, have big advantages over C++ classes. The single biggest problem with C++ classes is that private members are written in header files, so changing them requires recompiling the code using them - for important practical purposes, this makes private members a part of the interface. C++ is built such that recompilation is very slow (an order of magnitude slower than it is with virtually any other language), and classes are built to make recompilation a frequent event.

und:

As to the cost of changes to the the private parts - they trigger recompilation of all code that #includes your class definition. That's typically an order of magnitude more than "code actually using your class", because everything ends up including everything.

€: Full disclosure! Ich kann kein C++. Ich zitiere hier nur und mir wurde diese Behauptung nach meiner ungläubigen SRSLYWTF-Nachfrage von einem tatsächlichen C++-Entwickler bestätigt.
 
Zuletzt bearbeitet:
asdfman schrieb:
Aus dem C++ FQA:
Ich kann kein C++. Ich zitiere hier nur
Ja und zwar aus einer Rant-Seite eines C++-Hassers - C++ FQA ist alles, außer eine objektive/zitierwürdige Seite. Wenn ich privat wie der Verfasser zu viel Zeit hätte, könnte ich auch Seiten mit Rants zu Programmiersprachen veröffentlichen :D
 
QDOS sagt die Wahrheit. Der Autor der FQA ist massiv gegen C++ voreingenommen. Aber das heißt nicht, dass er lügt. Eine allgemeine Aussage wie "C++ ist modular", wie sie hier zusammenfassend von mehreren Leuten getätigt wurde, ist genauso nicht gelogen und genauso irreführend, denn diese Modularität zu erreichen ist nicht so trivial.

Ich habe mit antred über genau dieses Thema einmal in PMs gesprochen und er nannte die selbe Lösung. Habe sie hier absichtlich nicht weitergegeben, um vorzuführen, wie wenig hilfreich die bisherigen Antworten waren. Der Autor von deinem Text da ist voll doof ist noch weniger hilfreich.

TL;DR: Wenn jemand fragt, ob es eine Methode gibt, das TSP zu lösen, sollte man nicht einfach nur Ja antworten.
 
asdfman schrieb:
Ich habe mit antred über genau dieses Thema einmal in PMs gesprochen und er nannte die selbe Lösung.

Jetzt, wo du's sagst ... ich dachte doch gleich, ich hätte ein deja-vu-Erlebnis. :p
 
Zurück
Oben