C++ Klassen Efizient Umbauen / Refraktoren

OP #5967741
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!
#5967755
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.
Gast #5967777
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.
#5968278
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.