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
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.