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



  • Simon2 schrieb:

    pale dog schrieb:

    ...
    der ist aber etwas länglich um ihn hier zu posten...
    oder soll ich mal?

    Neee, aber vllt. Kannst Du CStoll ja seine Fragen zu dem Thema anhand des Quellcodes beantworten.

    die frage: 'Wie ist denn java.lang.BigInteger geschrieben ? Können die mehr als der normale Javaprogrammierer ?'
    kann man beantworten mit: 'normale javaprogrammierer hätten sich die klasse selber schreiben können'
    🙂



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



  • ...als ob zwei blinde sich streiten wer besser sieht...



  • CStoll schrieb:

    Java hat nichts mit Idealismus zu tun. Habe ich doch schon gesagt: Es geht mehr um Pragmatismus.

    Und schon beim Pragmatismus hapert es. Vielleicht bin ich ja zu tief im C++ Template-Denken verankert, aber für mich definiert sich ein Objekt nicht nur dadurch, was es kann, sondern auch wie du dieses Können abrufen kannst. 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.[/quote]
    Ich habe im Zusammenhang mit OOP mal gelernt, dass Objekte in der abstrakten Anschauung über Nachrichten miteinander kommunizieren. Das kannst Du zum Beispiel über Methoden bzw. Methodenaufrufe realisieren. Wie genau passen da jetzt Operatoren rein? aus "a=b*c" ist mir persönlich nicht direkt ersichtlich, welchem Objekt hier eine Nachricht zugeschickt werden soll, dass es etwas bestimmtes machen soll. Naja, die Operatoren definiert man ja meistens eh außerhalb der Klassen, sie haben also keinen direkten Bezug zu den Objekten. Mit anderen Worten: Man müsste mal darüber reden, ob sich Operator-Overloading überhaupt gut mit Prinzipien der Objektorientierung in Einklang bringen lässt.

    Also sag mal: Was stellt so ein binärer Operator eigentlich aus OOP-Sicht dar?



  • xivVerge schrieb:

    Also wenn ich Echtzeitanwendungen brauche dann ist mir ein nichtdeterministischer GC einfach im Weg.

    Es gibt durchaus echtzeitfähige Javavarianten. Was genau willst Du also sagen?



  • CStoll schrieb:

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

    String hab' ich gerade überflogen, ist natürlich viel quelltext, aber sieht ganz so aus, als wäre sie auch nur mit einfachen Java-mitteln gemacht.
    🙂



  • Gregor schrieb:

    Also sag mal: Was stellt so ein binärer Operator eigentlich aus OOP-Sicht dar?

    eine verknüpfung von zwei objekten.

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



  • Gregor schrieb:

    xivVerge schrieb:

    Also wenn ich Echtzeitanwendungen brauche dann ist mir ein nichtdeterministischer GC einfach im Weg.

    Es gibt durchaus echtzeitfähige Javavarianten. Was genau willst Du also sagen?

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



  • Gregor schrieb:

    Also sag mal: Was stellt so ein binärer Operator eigentlich aus OOP-Sicht dar?

    a+b -> a.operator+(b)



  • 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.



  • Gregor schrieb:

    Ich habe im Zusammenhang mit OOP mal gelernt, dass Objekte in der abstrakten Anschauung über Nachrichten miteinander kommunizieren. Das kannst Du zum Beispiel über Methoden bzw. Methodenaufrufe realisieren. Wie genau passen da jetzt Operatoren rein? aus "a=b*c" ist mir persönlich nicht direkt ersichtlich, welchem Objekt hier eine Nachricht zugeschickt werden soll, dass es etwas bestimmtes machen soll. Naja, die Operatoren definiert man ja meistens eh außerhalb der Klassen, sie haben also keinen direkten Bezug zu den Objekten. Mit anderen Worten: Man müsste mal darüber reden, ob sich Operator-Overloading überhaupt gut mit Prinzipien der Objektorientierung in Einklang bringen lässt.

    Ich hätte auch kein Problem damit, keine Operatoren zu haben - und int's über Methoden miteinander zu multiplizieren. Nur sollten die Möglichkeiten einheitlich für jedes Objekt sein (inklusive Zahlen).

    Also sag mal: Was stellt so ein binärer Operator eigentlich aus OOP-Sicht dar?

    Im einfachsten Fall eine Methode der Zahlenklasse ala "multipliziere dich mit dem Wert x". Aber praktisch dürfte so ein Operator auf double-dispatching hinauslaufen.



  • 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?



  • xivVerge schrieb:

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

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



  • 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.


Anmelden zum Antworten