Forum: PC-Programmierung C++ Klassen Efizient Umbauen / Refraktoren


von Alex G. (dragongamer)


Lesenswert?

Hallo Community,

bin studierter Medieninformatiker (Fokus auf Java, JS und Python) und 
werde nächsten Monat einen Job antreten der auch C++ in gewissem Umfang 
erfordert.
Die Sprache habe ich mir zumindest im Ansatz selbst schon einst 
beigebracht weil ich für ein Bachelorprojekt vor Jahren, die rohe 
Leistung einer hardwarenahen Sprache brauchte.

Nun arbeite ich zur Vorbereitung auf den Job an einem Hobbyprojekt mit 
C++ und die selben eher negativen Erfahrungen von damals widerholen 
sich:
Während die Entwicklung von etwas neuem, einigermaßen klappt, ist das 
umbauen von etwas was man schon selbst entwickelt hat, sehr träge, 
verglichen z.B. mit Java.

Ganz konkret möchte ich gerade eine verwaltende Klasse auflösen welche 
statische Hilfsfunktionen für 3 verschiedene andere Klassen bietet. Dies 
hat sich als unnötig herausgestellt und die Funktionen sollen nun 
jeweils aufgeteilt und in die Einzelklassen übertragen werden.

Dafür muss ich im Moment jedes mal die Header sowie die cpp Datei von 
beiden Klassen, also jedes mal 4 Dateien anpassen und dabei im Kopf 
behalten was schon umgebaut wurde und was nicht.
Bei jeder Parameter-änderung, ebenfalls beides anpassen.
Das fühlt sich einfach so träge an, im Vergleich.


Meine Frage ist daher, ist das normal und läuft das irgendwann so 
geschmeidig wenn ich mit C++ so viel Erfahrung haben werde wie mit Java?
Oder gibt es Tricks um das Ganze zu verbessern, ausser der eher 
aussichtslosen Idee die Software komplett vorher durchzuplanen?

Am liebsten wäre mir ein Tool das automatisch die Headerdatei im 
Hintergrund verwaltet und es erlaubt, auch in komplexen Projekten, die 
Methoden direkt zusammen mit der Implementation zu definieren (dass der 
C++ compiler so nicht funktioniert ist mir durchaus bekannt).

Bzw. vieleicht damit mein Anliegen weniger provokant klingt: Was für 
Vorteile habe ich als Entwickler dadurch, dass Definition und 
Implementation getrennt sind?
Ein genereller Vorteil ist natürlich dass man verschiedene 
Implementationen mit selber Schnittstelle haben kann. Solche Fälle sind 
aber so selten. Java's equivalent dafür, die "Interfaces" benutze ich 
vieleicht für 1/10 aller Klassen.


Bislang benutze ich Visual Studio Community als Umgebung ohne 
irgendwelche Plugins oder zusätzliche Skripte. Wahrscheinlich werde ich 
im Job eine mir noch unbekannte, linuxbasierte IDE einsetzen müssen.


Hoffe der ein oder Andere mit Erfahrung kann mir Tips geben :)
Schon mal vielen Dank!

: Bearbeitet durch User
von Roland D. (roland_d829)


Lesenswert?

Visual Studio bietet eine vielzahl an refaktor Hilfen und das ReSharper 
Plugin für C++ noch viel mehr, schaue nach welche davon dir helfen 
können.

ansonsten kommst du leider nicht um den Pain der Headerdateien drum 
herum.

Seit C++20 gibt es das Feature "modules", welches sich genau dieser 
Thematik an nimmt, leider ist es noch nicht so verbreitet.

von Dr. Sommer (Gast)


Lesenswert?

Alex G. schrieb:
> Was für Vorteile habe ich als Entwickler dadurch, dass Definition und
> Implementation getrennt sind?

Dass man keine komplett neue Sprache und neue Tools erfinden muss, und 
stattdessen auf älteren C++ Versionen aufbauen kann, welche damals in 
den 80ern/90ern aufgrund der schwachen Rechner solche Header-Dateien 
brauchten. Header haben eigentlich keine Vorteile mehr, aber sie sind 
aus historischen Gründen nötig. Modernere Sprachen wie eben JVM oder CLR 
basierte (Java, C#) brauchen sie nicht mehr.

Alex G. schrieb:
> weil ich für ein Bachelorprojekt vor Jahren, die rohe Leistung einer
> hardwarenahen Sprache brauchte.

Die Frage ist natürlich, ob du die "rohe Leistung" wirklich brauchst. 
Java ist mittlerweile sehr performant, auch wenn gleich wieder welche 
das Gegenteil behaupten weil sie mal eine schlecht programmierte Java 
Anwendung mit einer gut programmierten C Anwendung verglichen haben. 
Daher sollte man sich gut überlegen ob die Vorteile von C++ es wirklich 
wert sind. Denn so geschmeidig wie Java Programmierung kann C++ 
prinzipbedingt niemals werden.

von M.K. B. (mkbit)


Lesenswert?

Wie schon gesagt gibt es Tools in den IDEs, mit denen sich zum Beispiel 
Signaturen von Methoden automatisch im Header und in den Sourcen ändern 
lassen.

Sonst hat die Teilung in Header und Source für den Compiler den Vorteil, 
dass man für die Verwendung einer Klasse nur den Header und dessen 
Includes einlesen muss und nicht auch die für die Implementierung. 
Welche Geschwindigkeit es dann wirklich bringt weiß ich nicht.

Bei fertig gebauten Bibliotheken kann es auch sein, dass man den Header 
und die Bibliothek bekommmt, aber nicht die Sourcen.

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.