c++ vs. java... was hat zukunft



  • dot schrieb:

    eine verknüpfung von zwei objekten.

    außerdem sollte man bedenken, dass die welt nicht nur aus OOP besteht.

    Eine "Verknüpfung von 2 Objekten" ist nichts, was mir aus der Begriffswelt der OOP bekannt ist?! ...sicher gibt es mehr als OOP. Und ich hatte ja auch schon festgestellt, dass C++ eine Multiparadigmensprache ist. Java ist das aber nicht.



  • Gregor schrieb:

    CStoll schrieb:

    Und hätten sich normale Java-Programmierer auch die Klasse String oder Int selber schreiben können?

    Du kannst Dir die ganze Standardbibliothek selbst schreiben. Sowohl die String-Klasse, als aich die Integer-Klasse. ...nur hast Du dann nicht die Sonderbehandlungen für diese Klassen, die in der Sprachspezifikation eben genau für diese Klassen geregelt sind.

    Und warum wurde eine bestimmte (recht kleine) Gruppe von Klassen ausgewählt, die Java speziell behandelt?

    Jester schrieb:

    CStoll schrieb:

    Und wenn die selbe Operation (z.B. Addition) bei verschiedenen Typen völlig anders angesprochen werden muß oder die Wirkung einer Anweisung (z.B. das recht primitive 'x=y;') davon abhängt, welche Typen man verwendet, läuft das zumindest meinem Konzept zuwider.

    x=y; wird in Java immer denselben Effekt haben. x hat danach den selben Wert wie y. Wo genau siehst Du da ein Problem?

    Das Problem habe ich schon mehrfach versucht zu erklären, aber keiner der Javaner hat richtig zugehört 😉 Mit einem 'int x=y;' erzeugst du einen eigenständigen int-Wert, den du völlig unabhängig von y weiter behandeln kannst. Mit 'MyType x=y;' erzeugst du eine eigenständige Referenz, die aber mit dem gleichen Objekt arbeitet, das y festhält.



  • CStoll schrieb:

    Mit einem 'int x=y;' erzeugst du einen eigenständigen int-Wert, den du völlig unabhängig von y weiter behandeln kannst. Mit 'MyType x=y;' erzeugst du eine eigenständige Referenz, die aber mit dem gleichen Objekt arbeitet, das y festhält.

    da ist nichts mit 'festhalten', eine referenz ist auch bloss eine variable, nicht das objekt selber. wieso ist das nur so schwer zuverstehen 😞 😕



  • CStoll schrieb:

    Das Problem habe ich schon mehrfach versucht zu erklären, aber keiner der Javaner hat richtig zugehört 😉 Mit einem 'int x=y;' erzeugst du einen eigenständigen int-Wert, den du völlig unabhängig von y weiter behandeln kannst. Mit 'MyType x=y;' erzeugst du eine eigenständige Referenz, die aber mit dem gleichen Objekt arbeitet, das y festhält.

    Ich sehe das Problem in der Tat nicht. "=" ist der Zuweisungsoperator. Jetzt kann man sich angucken, was man da für Variablen hat. In Java bezeichnen die entweder primitive Datentypen oder Referenzen auf Objekte. ...und der Zuweisungsoperator macht immer das Gleiche. Das was rechts steht, wird der Variablen zugewiesen, die links steht.



  • int x = y;
    x = x + 1;  // verändert y nicht
    
    MyType x = y;
    x.add(1);  // verändert y
    

    so hab ich das als nicht javaianer verstanden.



  • pale dog schrieb:

    CStoll schrieb:

    Mit einem 'int x=y;' erzeugst du einen eigenständigen int-Wert, den du völlig unabhängig von y weiter behandeln kannst. Mit 'MyType x=y;' erzeugst du eine eigenständige Referenz, die aber mit dem gleichen Objekt arbeitet, das y festhält.

    da ist nichts mit 'festhalten', eine referenz ist auch bloss eine variable, nicht das objekt selber. wieso ist das nur so schwer zuverstehen 😞 😕

    Du hast selber gesagt, daß man in Java die Referenzen komplett vergessen kann. Aber bei der Zuweisung ist es dann doch wieder wichtig, ob man jetzt einen Primitiv-Typ oder eine Referenz zuweisen will (ich halte mich an deine Worte und betrachte die Objekte, mit denen ich arbeiten will - und das sind der int-Wert bzw. das MyType-Objekt).

    @Gregor: Die Referenzen sind auch nur ein Hilfsmittel - wichtig für den Anwendungsprogrammierer sind die Primitivtypen und die referenzierten Objekte.



  • dot schrieb:

    int x = y;
    x = x + 1;  // verändert y nicht
    
    MyType x = y;
    x.add(1);  // verändert y
    

    so hab ich das als nicht javaianer verstanden.

    Darf ich ? Darf ich ?
    [javaner-modus]y wird nicht verändert ! Es zeigt immer noch auf dasselbe Objekt ![/javaner-modus]

    Richtig, pale ? 😉

    Gruß,

    Simon2.



  • CStoll schrieb:

    Du hast selber gesagt, daß man in Java die Referenzen komplett vergessen kann. Aber bei der Zuweisung ist es dann doch wieder wichtig, ob man jetzt einen Primitiv-Typ oder eine Referenz zuweisen will (ich halte mich an deine Worte und betrachte die Objekte, mit denen ich arbeiten will - und das sind der int-Wert bzw. das MyType-Objekt).

    Ich weiß nicht, was pale dog in diesem Zusammenhang gesagt hat. ...vermutlich ging es um "Java hat keine Zeiger" oder so. Damit meint man: "Java hat keine Zeigerarithmetik". ...was IMHO eher positiv zu sehen ist.



  • Irgendwie habe ich hier den Eindruck, ihr solltet euch alle nochmal die Java-Variante von "Pointer-fun with Binky" anschauen. 😃



  • Simon2 schrieb:

    Darf ich ? Darf ich ?
    [javaner-modus]y wird nicht verändert ! Es zeigt immer noch auf dasselbe Objekt ![/javaner-modus]

    Man hätte es nicht treffender auf den Punkt bringen können. 😃



  • Simon2 schrieb:

    Darf ich ? Darf ich ?
    [javaner-modus]y wird nicht verändert ! Es zeigt immer noch auf dasselbe Objekt ![/javaner-modus]

    das is mir klar. ich meinte natürlich, dass es das objekt auf welches sich y referenziert verändert.
    und ich frag mich nur grad wo da jetzt der vorteil liegt.



  • Gregor schrieb:

    ...
    Eine "Verknüpfung von 2 Objekten" ist nichts, was mir aus der Begriffswelt der OOP bekannt ist?! ...

    Äh.... wo ist denn der Unterschied zwischen

    ClassA a;
    ClassB b;
    a.f(b);
    

    und

    ClassA a = new ClassA();
    ClassB b new ClassB();
    a.f(b);
    

    ?

    (Vorausgesetzt, dass in C++ f(ClassB&) deklariert ist)
    In beiden Fällen ist es eine "Verknüpfung zweier Objekte": a wird verändert und es kann auch b verändern....
    (In Java sogar noch ein wenig "zwingender", weil ich dort keine Kopiersemantik für b in der Funktionsdeklaration festlegen kann)
    Ich sage ja nicht, dass das falsch wäre, sondern sehe nur nicht, was Java hier "ooiger" machte als C++.

    Gruß,

    Simon2.



  • Simon2 schrieb:

    Ich sage ja nicht, dass das falsch wäre, sondern sehe nur nicht, was Java hier "ooiger" machte als C++.

    ich auch net. aber die diskussion ob jetzt Java "mehr OO" als C++ ist, ist genauso sinnlos wie die diskussion was denn nun zukunft hat oder ob autos besser sind als hühner.



  • pale dog schrieb:

    xivVerge schrieb:

    Das es z.B. keine DSPs gibt, welche ich mit Java programmieren kann.

    http://www.fadata.bg/products/jevm/
    😃

    Das würde ich in der Kategorie "Unsinn" ablegen.
    Wieso parallelisiere und optimiere ich wochenlang meine Algorithmen um extrem hohe Durchsatzraten bei der Auswertung von z.B. Inspektionsaufgaben zu erreichen, wenn dann erstens meine Laufzeitumgebung allen RAM wegfrisst und zweitens der JIT-Compiler alles wieder vermurkst?



  • Gregor schrieb:

    Ich weiß nicht, was pale dog in diesem Zusammenhang gesagt hat. ...vermutlich ging es um "Java hat keine Zeiger" oder so. Damit meint man: "Java hat keine Zeigerarithmetik". ...was IMHO eher positiv zu sehen ist.

    OK, dann zitiere ich mal (ist schon eine Weile her - das Original war auf Seite 26 des Threads):

    pale dog schrieb:

    CStoll schrieb:

    Und das ist das Problem 😉 Die Pointer sind zwar da (und man muß sich immer wieder vor Augen führen, daß man in Wirklichkeit "nur" Zeiger in der Hand hält)...

    nein, warum sollte man im entfernstesten an zeiger denken, wenn man mit Java programmiert? 😕

    @dot: Genau das ist der Unterschied, den die anwesenden Javaner nicht verstehen - die "Referenz y" wird durch den Methodenaufruf an x nicht verändert, das Objekt y (d.h. das Objekt, auf das diese Referenz zeigt) schon.



  • xivVerge schrieb:

    Wieso parallelisiere und optimiere ich wochenlang meine Algorithmen um extrem hohe Durchsatzraten bei der Auswertung von z.B. Inspektionsaufgaben zu erreichen, wenn dann erstens meine Laufzeitumgebung allen RAM wegfrisst und zweitens der JIT-Compiler alles wieder vermurkst?

    Weil ein Extra-RAM-Modul billiger ist als "10 Stunden Entwickler arbeiten lassen". 😉



  • CStoll schrieb:

    Das Problem habe ich schon mehrfach versucht zu erklären, aber keiner der Javaner hat richtig zugehört 😉 Mit einem 'int x=y;' erzeugst du einen eigenständigen int-Wert, den du völlig unabhängig von y weiter behandeln kannst. Mit 'MyType x=y;' erzeugst du eine eigenständige Referenz, die aber mit dem gleichen Objekt arbeitet, das y festhält.

    Genau, eine eigenständige Referenz, die ich unabhängig von x manipulieren kann. Also alles prima. 🙂

    Btw: wenn ich int x=5; int y=x; ist das dann die gleiche Fünf oder sind's zwei verschiedene? 😃



  • Jester schrieb:

    CStoll schrieb:

    Das Problem habe ich schon mehrfach versucht zu erklären, aber keiner der Javaner hat richtig zugehört 😉 Mit einem 'int x=y;' erzeugst du einen eigenständigen int-Wert, den du völlig unabhängig von y weiter behandeln kannst. Mit 'MyType x=y;' erzeugst du eine eigenständige Referenz, die aber mit dem gleichen Objekt arbeitet, das y festhält.

    Genau, eine eigenständige Referenz, die ich unabhängig von x manipulieren kann. Also alles prima. 🙂

    Die Referenzen sind verschieden, aber sie verweisen auf das selbe Objekt - und die Objekte hinter den Referenzen sind das, womit ich umgehen will.

    Btw: wenn ich int x=5; int y=x; ist das dann die gleiche Fünf oder sind's zwei verschiedene? 😃

    Wenn du es so willst, ist es die gleiche Fünf - aber der Unterschied ist, daß mich zwar der Wert (als Zahl) dieser Fünf interessiert, aber nicht der Wert (als Adresse) einer Referenz/Zeiger.



  • CStoll schrieb:

    @dot: Genau das ist der Unterschied, den die anwesenden Javaner nicht verstehen - die "Referenz y" wird durch den Methodenaufruf an x nicht verändert, das Objekt y (d.h. das Objekt, auf das diese Referenz zeigt) schon.

    Was heißt da schon "verstehen" und "Unterschied"? Natürlich versteht hier jeder, was Ihr meint. Ihr scheint aber nicht akzeptieren zu wollen, dass die Mechanismen, die Java da hat, insich ein völlig konsistentes Verhalten zeigen. Java ist halt nicht C++ und ein "MyObject a;" heißt in beiden Sprachen meistens etwas anderes.

    Wenn jemand nicht gerade ein Anfänger in der jeweiligen Sprache ist, wird er dort keinerlei Probleme mit Zuweisungen usw. haben. Glaubt Ihr, da sagt sich einer "Huch, was passiert denn da jetzt plötzlich?"? Ne. Letztendlich ist das ein völliges Non-Issue, was hier diskutiert wird.



  • Gregor schrieb:

    xivVerge schrieb:

    Wieso parallelisiere und optimiere ich wochenlang meine Algorithmen um extrem hohe Durchsatzraten bei der Auswertung von z.B. Inspektionsaufgaben zu erreichen, wenn dann erstens meine Laufzeitumgebung allen RAM wegfrisst und zweitens der JIT-Compiler alles wieder vermurkst?

    Weil ein Extra-RAM-Modul billiger ist als "10 Stunden Entwickler arbeiten lassen". 😉

    lol


Anmelden zum Antworten