c++ vs. java... was hat zukunft
-
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.
-
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.
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?