{"id":403,"date":"2008-03-03T11:39:32","date_gmt":"2008-03-03T09:39:32","guid":{"rendered":"http:\/\/www.tupperclub.de\/blog\/?p=403"},"modified":"2008-03-05T00:11:03","modified_gmt":"2008-03-04T22:11:03","slug":"c-gedanken-eines-java-programmierers","status":"publish","type":"post","link":"https:\/\/www.tupperclub.de\/blog\/?p=403","title":{"rendered":"C++: Gedanken eines Java Programmierers"},"content":{"rendered":"<p>Die meisten meiner bisherigen Softwareprojekte sind im Java-Umfeld gewesen. Ab und an mu\u00df man als Programmierer aber auch \u00fcber den Tellerrand gucken \u2013 und wenn man es nur macht, um zu Wissen, wie gut die Suppe zu Hause wirklich ist. Im letzten Jahr habe ich ein gr\u00f6\u00dferes C++ Projekt (Visual C Version 6) hinter mich gebracht und m\u00f6chte nun meine Eindr\u00fccke aus dem Blickwinkel eines erfahrenen Java Programmierers wiedergeben.<br \/>\n<!--more--><br \/>\nMeine erste Entdeckung war, da\u00df mein Programmierstil in C++ bei weitem nicht mehr so elegant ist, wie er es in Java war. Der Hauptgrund daf\u00fcr ist vermutlich die schlechte Unterst\u00fctzung durch IDEs. Lange Methoden? Mit IntelliJ IDEA kein Problem! Man markiert einfach einen Code Bereich und macht per Refactoring einen Methodenaufruf draus. Dies ist alles anders in C++. Immerhin gibt es <a href=\"http:\/\/www.wholetomato.com\/\">Erweiterungen f\u00fcr Visual Studio<\/a>, die wenigstens rudiment\u00e4res Syntax-Highlighting und Refactoring nachr\u00fcsten, allerdings funktioniert das bei weitem nicht so gut wie bei Java. Schon bei STL Klassen funktioniert die Codevervollst\u00e4ndigung nicht mehr, weil bei unserer Version die Namespace-Deklaration mit Makros gel\u00f6st wurde. <\/p>\n<p>Leider habe ich nicht nur mangelnde Tools zu beklagen. Auch die Sprache an sich hat es mir nicht besonders angetan. Trotz Mehrfachvererbung kann man das elegante Interface-Konzept, wie man es aus Java kennt, nur schlecht nachbilden. Besonders bei aufwendigen Vererbungshierarchien st\u00f6\u00dft man leicht auf komplizierte Compiler Warnungen. Gest\u00f6rt hat mich auch, da\u00df ein Konstruktor einer abgeleiteten Klasse <a href=\"http:\/\/www.thescripts.com\/forum\/thread131292.html\">keine Membervariablen der Basisklasse ver\u00e4ndern<\/a> kann. Die Foge davon ist, da\u00df man ggf. die betroffenen Member \u00fcber einen Konstruktor zug\u00e4nglich machen muss. Je nach Anzahl von Member Variablen ist das sehr unsch\u00f6n. <\/p>\n<p>Die Operator\u00fcberladung kann praktisch sein, wenn man sie richtig verwendet. Falsch verwendet, bietet sie jedoch auch sehr viel Potential f\u00fcr schwer zu diagnostizierende Fehler.<\/p>\n<p>F\u00fcr komplexere Aufgaben (z.B. Multithreading) reichen die mitgelieferten Bibliotheksfunktionen leider nicht aus. Viele Entwickler verwenden daher <a href=\"http:\/\/www.cs.wustl.edu\/~schmidt\/ACE-overview.html\">ACE<\/a>. Leider ist die frei verf\u00fcgbare Dokumentation katastrophal schlecht.<\/p>\n<p>Ich kann mich nicht erinnern, jemals Probleme mit dem Java Compiler gehabt zu haben. Visual Studio hat mich jedoch regelm\u00e4\u00dfig mit internen Compilerfehlern konfrontiert. Die meisten konnten durch Vertauschen von zwei benachbarten Zeilen korrigiert werden. Manchmal war jedoch ein gr\u00f6\u00dferer Umbau n\u00f6tig. Es ist jedenfalls beunruhigend, wenn semantisch \u00e4quivalente Programme unterschiedliche Ergebnisse des Compilers hervorrufen\u2026<\/p>\n<p>Nach einem Jahr kann ich sagen: Ich habe mich mit der Sprache und den verf\u00fcgbaren Werkzeugen arrangiert. Gew\u00f6hnen oder gar Lieben werde ich dieses Umfeld sicherlich nicht. Daf\u00fcr bieten die aktuellen L\u00f6sungen, die der Steinzeit schon entwachsen sind, einfach zu viel Komfort. <\/p>\n<p>Fazit: Java Entwicklung besch\u00e4ftigt sich mit Software Architektur, C++ damit, wie man komplexe Problemstellungen dem Compiler beigebracht bekommt. <\/p>\n<p>N\u00e4chster fahrplanm\u00e4\u00dfiger Halt: C# und .NET.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die meisten meiner bisherigen Softwareprojekte sind im Java-Umfeld gewesen. Ab und an mu\u00df man als Programmierer aber auch \u00fcber den Tellerrand gucken \u2013 und wenn man es nur macht, um zu Wissen, wie gut die Suppe zu Hause wirklich ist. Im letzten Jahr habe ich ein gr\u00f6\u00dferes C++ Projekt (Visual C Version 6) hinter mich [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,17],"tags":[],"class_list":["post-403","post","type-post","status-publish","format-standard","hentry","category-gedanken","category-java"],"_links":{"self":[{"href":"https:\/\/www.tupperclub.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/403","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tupperclub.de\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tupperclub.de\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tupperclub.de\/blog\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tupperclub.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=403"}],"version-history":[{"count":0,"href":"https:\/\/www.tupperclub.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/403\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.tupperclub.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=403"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tupperclub.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=403"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tupperclub.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=403"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}