vorteile von c++ gegenüber von java



  • hi.
    ich habe jetzt schon einige vergleiche von java und c++ gelesen und häufig folgende argumente gefunden, von denen ich leider nicht weis, wie aktuell die argumente sind.

    java:
    -plattformunabhängig(er)
    -liefert mehr basisfunktionen mit(threads, erweiterte for-schleife, sockets, uvm.)
    -sicherer

    c++
    -hat pointer (braucht man die/ kann man die nicht umgehen)
    -hat mehrfachvererbung (mir fällt kein sinnvolles beispiel ein)
    -ist schneller( habe diesen verleich gefunden:"ein gutes c++-program ist doppelt so schnell wie ein extrem gutes java-program, wenn beide programme das selbe machen".
    habe aber auch die aussage gefunden, dass c++ und javaprogramme inzwischen gleich schnell seien)
    -braucht weniger speicher/leistung/verwaltungsarbeit, da keine javavm laufen muss. (merkt man das heute noch, oder müsste man, um das zu merken, dafür sehr guten code schreiben?)

    meine fragen neben den in klammern stehenden sind:
    -was kann ich mit c++ machen, das ich nicht, oder nur wesentlich schlechter, mit java machen kann?
    -welche weiteren argumente sprechen für java/c++?

    schonmal danke für alle hilfreichen antworten.

    ps.:meine vorkenntnisse sollen hier keine rolle spielen.



  • Es ist anzunehmen, daß in diesem Unterforum viel mehr C++-Programmierer sind als im Java-Forum.
    Du wirst also gefärbte Meinungen hören.
    Willst Du *wirklich* einseitige Meinungen hören?



    Falls nein, verschiebe ich Dich nach "Rund um die Programmierung", wo alle Sprachenliebhaber vertreten sind.

    An die anderen: Bitte antwortet erst, nachdem die Einordnungsfrage geklärt ist.



  • Der einzige richtige Vorteil von Java gegenüber C++ ist meiner Meinung nach Reflection und dass der Build-Prozess so viel einfacher ist.

    C++ ist deutlich speichereffizienter, performanter, man hat so viel mehr Möglichkeiten auszudrücken was man möchte (Values, Referenzen, Pointer, Operatorenüberladung, Move-/Copy-Semantiken etc), C++-Templates sind den popeligen Java-Generics absolut überlegen und vieles mehr.
    Desweiteren hat man mehr Freiheiten und wird nicht permanent zu nervenaufreibenden Techniken gezwungen.

    Die Funktionalität des Java Frameworks ist sowieso ein Witz, der aktuelle C++-Standard liefert bis auf Sockets alle von dir genannten Dinge mit, und Sockets werden bald dazukommen ... bis dahin bedient man sich einfach Boost, Quasi-Standard Bibliotheken.

    So erledigt sich auch der Punkt mit Plattformunabhängigkeit, die ist bei Java imho auch nur gering besser.

    Die von dir genannten Punkte schreien eher nach Python, das ist sicher, plattformunabhängig und kann praktisch alles out-of-the-box.


  • Mod

    Ethon schrieb:

    So erledigt sich auch der Punkt mit Plattformunabhängigkeit, die ist bei Java imho auch nur gering besser.

    Das kommt bei Java aber stark auf die Plattformen an. C++-Compiler gibt's nun wirklich fast überall, für JVMs findet man nur, wenn's nicht zu "exotisch" ist.



  • oh hatte das forum "rund um die programmierung" übersehen gehabt.
    es wäre sehr freundlich, wenn der thread dahin verschoben werden kann, denn so spaare ich mir die arbeit diese frage nocheinmal in einem reinen javaforum zu stellen.



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x) in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


  • Mod

    java_oder_c++ schrieb:

    oh hatte das forum "rund um die programmierung" übersehen gehabt.
    es wäre sehr freundlich, wenn der thread dahin verschoben werden kann, denn so spaare ich mir die arbeit diese frage nocheinmal in einem reinen javaforum zu stellen.

    Dann bekommst du statt einseitiger Meinungen nun einen Flamewar zwischen den Java- und den C++-Jüngern. Aber man kann's ja mal versuchen *verschieb*, vielleicht wird's ja diesmal ein zivilisierter Thread (:D 😃 😃 Ich kann mich kaum halten vor Lachen. Als ob das klappen würde 😃 😃 😃 ).

    Viel Spaß dann noch.



  • Voraus: Ich bin klarer C++ Fanboy.

    java_oder_c++ schrieb:

    -plattformunabhängig(er)

    Würde ich nicht unbedingt sagen. Java gibt es nur für Systeme, für die es auch eine VM gibt. C++ funktioniert überall, wo ein C++ Compiler vorhanden ist. Natürlich muss man neu kompilieren, aber solange man standardkonform programmiert, ist das völlig unproblematisch.

    java_oder_c++ schrieb:

    -liefert mehr basisfunktionen mit(threads, erweiterte for-schleife, sockets, uvm.)

    Das stimmt. Viel mehr Basisfunktionen. C++11 bessert da Einiges aus, aber das ist noch unzureichend unterstützt und Java hat hier weiterhin die Nase vorn.

    java_oder_c++ schrieb:

    -sicherer

    Na ja, das müsste man dann etwas weiter spezifizieren, so allgemein kann man das auch nicht sagen.

    java_oder_c++ schrieb:

    -hat pointer (braucht man die/ kann man die nicht umgehen)

    "Hat Pointer". Ja, Java hat intern mit Sicherheit auch Pointer, die kann man nämlich technisch nicht umgehen. Man kann natürlich die Sprache beschneiden und keinen Zugriff darauf geben, aber für sinnvoll halte ich das nicht. Eine Art Müllsammler wie Java kann man in C++ allerdings auch nutzen, siehe std::shared_ptr und std::unique_ptr. (std::auto_ptr ist veraltet.)

    java_oder_c++ schrieb:

    -hat mehrfachvererbung (mir fällt kein sinnvolles beispiel ein)

    [Edit: Java hat wohl Interfaces als eine Art Ersatz. Wie gut das wirkt, müssen andere beurteilen.]

    java_oder_c++ schrieb:

    -ist schneller( habe diesen verleich gefunden:"ein gutes c++-program ist doppelt so schnell wie ein extrem gutes java-program, wenn beide programme das selbe machen".
    habe aber auch die aussage gefunden, dass c++ und javaprogramme inzwischen gleich schnell seien)

    C++ ist jedenfalls (außer in sehr speziellen Fällen) nicht langsamer. Wie viel schneller C++ ist, hängt in großem Maße von den getesteten Programmen ab, deshalb wirst du hier kein "C++ ist genau X,Y mal schneller als Java" finden.
    Edit: Da man in C++ relativ gut bestimmen kann wie Daten im Speicher liegen, daher hat man hier noch ganz andere Optimierungsmöglichkeiten. Ähnlich dürfte es mit vielen kleinen Objekten auf dem Stack aussehen. Bei reinen "rechne xy aus" Aufgaben ist da Unterschied aber wohl nicht mehr sehr Groß. Interessanter Thread vielleicht: http://www.c-plusplus.net/forum/258515-188

    java_oder_c++ schrieb:

    -braucht weniger speicher/leistung/verwaltungsarbeit, da keine javavm laufen muss. (merkt man das heute noch, oder müsste man, um das zu merken, dafür sehr guten code schreiben?)

    Braucht weniger Speicher wird natürlich immer unwichtiger, aber mich persönlich stören die langen Ladezeiten von Javaprogrammen noch. Ob das jetzt an Java oder den Programmierern liegt, weiß ich nicht.

    Edit @Steffo: Genau, in C++ kann man nur hacken, aber sauber ist das nie. Du hast es erfasst. 🙄

    Und noch ein Edit: Aus schlichter Unwissenheit die Frage: Was kann Java eigentlich, was C++ nicht kann? (Damit meine ich natürlich Sprachfeatures, für die Schlaumeier die gleich aus der Ecke kommen und sagen "natürlich kann man mit C++ alles machen, aber es ist nicht so schön". Und für die nächsten Superdenker: Mit Sprachfeatures sind keine Threads, Sockets, etc. gemeint.)



  • Wenn du sauber programmieren lernen willst, dann nimm Java. Das was C++ Programmierer hinhacken ist alles mögliche, aber oft nicht sauber.
    Es gibt nicht viele Argumente für C++. Willst du auf die Hardware zugreifen? Oder auf System-APIs? Dann kann man über C++ nachdenken, wobei bei letzterem .Net zu bevorzugen wäre.
    Das, worüber einige hier lamentieren "Java kann aber dies nicht" ist nicht so tragisch wie das dargestellt wird, denn das Entwicklungsmodell in Java ist schlicht anders, d. h., dass man bei der Implementation eben anders als in C++ vorgeht. Dies allerdings als Nachteil zu verkaufen, ist Quatsch.

    Liebe Grüße
    Steffo



  • Steffo schrieb:

    Wenn du sauber programmieren lernen willst, dann nimm Java.

    Eher umgekehrt. Klassen als Namespaces zu missbrauchen ist nicht unbedingt sauber.

    Steffo schrieb:

    Das was C++ Programmierer hinhacken ist alles mögliche, aber oft nicht sauber.

    Das zu verallgemeinern, ist Schwachsinn. Es gibt viele Leute, die sich C++-Programmierer nennen, aber auf dem Stand vor 20 Jahren sind. Modernes C++ ist anders.

    Steffo schrieb:

    Es gibt nicht viele Argumente für C++. Willst du auf die Hardware zugreifen? Oder auf System-APIs? Dann kann man über C++ nachdenken, wobei bei letzterem .Net zu bevorzugen wäre.

    In erster Linie wohl wegen Performance. (Es soll aber auch Leute wie mich geben, die C++ einfach als schöne Sprache empfinden, eine Herausforderung suchen und Einschränkungen ganz und gar nicht mögen.)

    Steffo schrieb:

    Das, worüber einige hier lamentieren "Java kann aber dies nicht" ist nicht so tragisch wie das dargestellt wird, denn das Entwicklungsmodell in Java ist schlicht anders, d. h., dass man bei der Implementation eben anders als in C++ vorgeht. Dies allerdings als Nachteil zu verkaufen, ist Quatsch.

    Das Entwicklungsmodell von Java ist (höflich ausgedrückt) so entworfen, dass auch Durchschnittsmenschen damit zurechtkommen. Ich weigere mich weiterhin, die überladenen Operatoren von String zu verwenden, aus Konsistenzgründen.



  • cooky451 schrieb:

    Edit @Steffo: Genau, in C++ kann man nur hacken, aber sauber ist das nie. Du hast es erfasst. 🙄

    Es gibt Sprachen die begünstigen sauberes Programmieren (ich sage nicht, dass sie dir das abnehmen, aber sie begünstigen es) und es gibt welche, die unsauberes Programmieren begünstigen. Vergleiche einfach mal Java- mit C++-Code.

    L. G.
    Steffo



  • Steffo schrieb:

    Es gibt Sprachen die begünstigen sauberes Programmieren (ich sage nicht, dass sie dir das abnehmen, aber sie begünstigen es) und es gibt welche, die unsauberes Programmieren begünstigen. Vergleiche einfach mal Java- mit C++-Code.

    Du klingst wie jemand, der bisher nur alten Code gesehen hat. Zeig mal was her davon, was du meinst.



  • 314159265358979 schrieb:

    Steffo schrieb:

    Es gibt Sprachen die begünstigen sauberes Programmieren (ich sage nicht, dass sie dir das abnehmen, aber sie begünstigen es) und es gibt welche, die unsauberes Programmieren begünstigen. Vergleiche einfach mal Java- mit C++-Code.

    Du klingst wie jemand, der bisher nur alten Code gesehen hat. Zeig mal was her davon, was du meinst.

    Es fängt schon mit den abgestutzten Funktionsnamen von C++ an, bei denen man als Anfänger erst mal überfordert ist was die zu bedeuten haben. Die Java-API ist hingegen ein Vorbild wie man Klassen, Methoden und Variablen bennent. Sie ist ebenfalls ein Vorbild was OO betrifft.
    Ich persönlich finde es witzig, dass du Java als inkonsistent betrachtest (das denke ich übrigens auch, aber es fällt mir nicht sonderlich negativ auf), was ist dann C++? Es hat von C Altlasten, unterstützt zwar Objektorientierung, aber die Bibliotheken sind es nicht wirklich und es ist überaus komplex (Mehrfachvererbung? Wie kommen Java-Entwickler nur ohne damit aus?!).



  • Macht den Thread dicht. Der hier taugt nicht mal für einen Flamewar, geschweige denn für irgendwelche anderweitigen Erkenntnisse.



  • Steffo schrieb:

    Es fängt schon mit den abgestutzten Funktionsnamen von C++ an, bei denen man als Anfänger erst mal überfordert ist was die zu bedeuten haben. Die Java-API ist hingegen ein Vorbild wie man Klassen, Methoden und Variablen bennent.

    Bitte bringe konkrete Beispiele. Ich kann damit so nichts anfangen, geschweige denn darauf eingehen.

    Steffo schrieb:

    Sie ist ebenfalls ein Vorbild was OO betrifft.

    Soso. Warum ist Math dann eine Klasse? Was ist denn ein Math-Objekt? 🤡

    Steffo schrieb:

    Ich persönlich finde es witzig, dass du Java als inkonsistent betrachtest (das denke ich übrigens auch, aber es fällt mir nicht sonderlich negativ auf), was ist dann C++?

    In C++ gibts so gut wie keine Sprachfeatures, die nicht ohne Compilermagie auskommen.

    Steffo schrieb:

    Es hat von C Altlasten

    Altes muss nicht unbedingt schlecht sein. (Auch wenn es da Dinge gibt, die mich stören.)

    Steffo schrieb:

    unterstützt zwar Objektorientierung, aber die Bibliotheken sind es nicht wirklich und es ist überaus komplex

    Von welchen Bibliotheken sprichst du? Ich brauche Beispiele.

    Steffo schrieb:

    (Mehrfachvererbung? Wie kommen Java-Entwickler nur ohne damit aus?!).

    Mehrfachvererbung habe ich in Java schon mehrmals vermisst. Und wenn nur dafür, einen Listener von 2 anderen Listenerklassen erben lassen zu können. Nein, die Listener hätten keine Interfaces sein können.



  • 314159265358979 schrieb:

    Steffo schrieb:

    Es fängt schon mit den abgestutzten Funktionsnamen von C++ an, bei denen man als Anfänger erst mal überfordert ist was die zu bedeuten haben. Die Java-API ist hingegen ein Vorbild wie man Klassen, Methoden und Variablen bennent.

    Bitte bringe konkrete Beispiele. Ich kann damit so nichts anfangen, geschweige denn darauf eingehen.

    cin<< oder vielleicht doch cin>> oder <cin>???

    Steffo schrieb:

    Sie ist ebenfalls ein Vorbild was OO betrifft.

    Soso. Warum ist Math dann eine Klasse? Was ist denn ein Math-Objekt? 🤡

    Gegenfrage: Was für einen Sinn macht ein Math-Objekt?

    Steffo schrieb:

    Ich persönlich finde es witzig, dass du Java als inkonsistent betrachtest (das denke ich übrigens auch, aber es fällt mir nicht sonderlich negativ auf), was ist dann C++?

    In C++ gibts so gut wie keine Sprachfeatures, die nicht ohne Compilermagie auskommen.

    Was willst du mir jetzt damit sagen?

    Steffo schrieb:

    Es hat von C Altlasten

    Altes muss nicht unbedingt schlecht sein. (Auch wenn es da Dinge gibt, die mich stören.)

    Der Name AltLAST impliziert ja schon, dass ausschließlich schlechtes gemeint ist.

    Steffo schrieb:

    unterstützt zwar Objektorientierung, aber die Bibliotheken sind es nicht wirklich und es ist überaus komplex

    Von welchen Bibliotheken sprichst du? Ich brauche Beispiele.

    Wieder popliges Beispiel aus der IO-Bibliothek: cout>>, oder cout<< oder côut>? Wo ist die Objektorientierung?

    Steffo schrieb:

    (Mehrfachvererbung? Wie kommen Java-Entwickler nur ohne damit aus?!).

    Mehrfachvererbung habe ich in Java schon mehrmals vermisst. Und wenn nur dafür, einen Listener von 2 anderen Listenerklassen erben lassen zu können. Nein, die Listener hätten keine Interfaces sein können.

    “Ich würde Klassen [-Vererbung] weglassen.” - James Gosling, Principal Scientist bei Sun Microsystems, 2001 auf die Frage, was er anders machen würde, wenn er Java noch einmal zu entwerfen hätte.

    “Ziehe Objektkomposition der Vererbung vor.” - E. Gamma, R. Helm, R. Johnson, J. Vlissides, in Entwurfsmuster, Elemente wiederverwendbarer objektorientierter Software.



  • Steffo: Du hast gerade *etwas* gefailt, da std::cin und std::cout Objekte sind, aber mach dir nichts draus. 😃

    Steffo schrieb:

    Gegenfrage: Was für einen Sinn macht ein Math-Objekt?

    Gar keinen, das war ja das Argument von Pi.


  • Mod

    lzoiktujzrnhbgvfc schrieb:

    Macht den Thread dicht. Der hier taugt nicht mal für einen Flamewar, geschweige denn für irgendwelche anderweitigen Erkenntnisse.

    Es gab immerhin noch eine lesenswerte Antwort, bevor das Bashing los ging. Aber ich bin hier nicht mehr der Mod, daher kann ich weder Pi und Steffo wegschneiden um die Diskussion zu retten, noch dem Thread den Gnadenschuss geben. Dieses Mal ging es aber wirklich sehr schnell. Normalerweise fängt das erst auf Seite 2-3 an.



  • cooky451 schrieb:

    Steffo: Du hast gerade *etwas* gefailt, da std::cin und std::cout Objekte sind, aber mach dir nichts draus. 😃

    Pah, das ist doch nur ein Beweis dafür wie verzwickt C++ ist. Ein Objekt ohne new? Wie soll ich das erkennen? Ich dachte std ist schlicht der Namespace.



  • Steffo schrieb:

    cin<< oder vielleicht doch cin>> oder <cin>???

    Und wo liegt das Problem? cin/cout ist das Objekt. >> und << sind Operatoren. Du hast also nichts verstanden und reißt den Mund auf.

    Steffo schrieb:

    Gegenfrage: Was für einen Sinn macht ein Math-Objekt?

    Keinen. Aber eine Klasse drückt genau das aus.

    Steffo schrieb:

    Was willst du mir jetzt damit sagen?

    String hat operator + überladen. Das geht nur dank Compiler-Magie. foreach geht nur, wenn der Typ Iterable implementiert. Grunddatentypen werden ohne Zutun des Programmierers in Wrapperklassen gewrappt.

    Steffo schrieb:

    Der Name AltLAST impliziert ja schon, dass ausschließlich schlechtes gemeint ist.

    Na dann zeig mir was du meinst.

    Steffo schrieb:

    Wieder popliges Beispiel aus der IO-Bibliothek: cout>>, oder cout<< oder côut>? Wo ist die Objektorientierung?

    cin und cout sind Instanzen der Klassen std::istream und std::ostream. Wo fehlt dir da Objektorientierung?

    Steffo schrieb:

    “Ich würde Klassen [-Vererbung] weglassen.” - James Gosling, Principal Scientist bei Sun Microsystems, 2001 auf die Frage, was er anders machen würde, wenn er Java noch einmal zu entwerfen hätte.

    Was willst du mir damit sagen?

    Steffo schrieb:

    “Ziehe Objektkomposition der Vererbung vor.” - E. Gamma, R. Helm, R. Johnson, J. Vlissides, in Entwurfsmuster, Elemente wiederverwendbarer objektorientierter Software.

    Funktioniert in diesem Fall nur leider so nicht. Komposition ist vorzuziehen, aber Mehrfachvererbung kann extrem nützlich sein. Ich musste letzendlich 2 Klassen schreiben. Die Daten mussten natürlich konsitent gehalten werden. Was für ein Spaß.


Anmelden zum Antworten