C++ | Java
-
@donay: er hat ja schon erfahrung mit OOP und es hat ja auch vorteile
und C++ sollte man ja auch mit OOP benutzen
wenn du nur sequentiell programmieren willst dann kannst du ja gleich C oder pascal nehmenregards
gomberl
-
dazu musst du auch noch wissen das java sehr umständlich ist
nee muß er nicht, weils nicht stimmt (finde ich zumindest)
der Java-Code selber is jedenfalls nicht umständlicher als objektorientierter C++ - Code. Und OO an sich is nur für Leute die es nicht kapiert haben umständlicher als strukturierter Code.
-
Original erstellt von gomberl:
**@donay: er hat ja schon erfahrung mit OOP und es hat ja auch vorteile
und C++ sollte man ja auch mit OOP benutzen
wenn du nur sequentiell programmieren willst dann kannst du ja gleich C oder pascal nehmen
regards
**er sagte, es werde ZU streng genommen. damit hat er recht. oder wo hängt sqrt() rum?
daß java generell umständlicher sei, ist meiner meinung nach aber eher flasch. die sprache ist zwar schlechter, das wird aber durch dir prima bibliothek ausreichend kompensiert. gerade kleinere programe sind in java einfacher zu machen.
-
sqrt() ist eine statische Methode der Klasse Math und ist damit meiner Meinung nach sehr gut untergebracht
wieso sollte Java schlechter sein? Weil es nicht so überfrachtig ist mit Sprachelementen?
-
Original erstellt von crass:
wieso sollte Java schlechter sein? Weil es nicht so überfrachtig ist mit Sprachelementen?ohje. flamewar komme.
-
Original erstellt von crass:
sqrt() ist eine statische Methode der Klasse Math und ist damit meiner Meinung nach sehr gut untergebrachtAha, wieso?
da wird doch eine klasse nur als namespace missbraucht - ich sehe da keinen sinn warum man sqrt nicht in den namespace math geben sollte...
btw: eine static methode ist ja auch nur eine funktion (da sie kein (this) objekt hat) - insofern ist es ein irrglaube das alles OOP sei, was in Klassen steckt.
ich sehe keinen vorteil darin
class Math { static double sqrt(double d){ ... } }
darin zu schreiben wenn eigentlich
namespace Math { double sqrt(double d) { ... } }
gemeint war, zu schreiben.eine Klasse sollte man (IMHO) nicht als namespace verwenden...
-
ja klar, Klassen werden in Java auch als eine Art Namespace für statische Funktionen verwendet. Imo wirklich ne feine Sache, anstatt wieder ein (überflüssiges) neues Sprachkonzept wie namespace einzuführen. Mit Mißbrauch hat das nix zu tun
-
außerdem gehört double sqrt(double) in die klasse double rein, wenn mans richtig machen will.
-
Original erstellt von volkard:
außerdem gehört double sqrt(double) in die klasse double rein, wenn mans richtig machen will.Exakt!
ein
result=value.sqrt();
liest sich auch viel besser als ein
result=math.sqrt(value);was wenn ich nämlich math nicht kenne? (weil es uU nicht math sondern foobar ist - und das ist was total super tolles was nicht jeder kennt) - dann würde ich verzweifelt nach der foobar deklaration suchen
-
da habt ihr wohl recht
das ganze ist sogar mir zuwieder
und ich habe java eigentlich fuer alles ganz gernefuer viele dinge ist es halt ausreichend
und es geht ja auch schnellerwenn es dann gefinkelter wird macht es auch mit C++ und allen feinheiten davon (Templates, namespaces, STL, destruktoren, ....) mehr spass und ist auch sinnvoller
dementsprechend
zu jedem zwecke eine sprachegomberl
-
Original erstellt von Shade Of Mine:
**
was wenn ich nämlich math nicht kenne?(**...dann hast du Glück, dass Java ausgezeichnet dokumentiert ist. So findest du meistens in kürzester Zeit, was du brauchst.
...und solche Funktionen, wie sqrt findet man ja sowieso in jedem Standard-Javabuch im Inhaltsverzeichnis.
-
Original erstellt von Shade Of Mine:
**
result=value.sqrt();liest sich auch viel besser als ein
result=math.sqrt(value);
(**BTW: Mit Java 1.5 werden statische Imports eingeführt. Damit kann das dann so aussehen:
result=sqrt(value);
...also so ähnlich, als ob da in C++ vorher sowas wie "using namespace blah" stehen würde.
[ Dieser Beitrag wurde am 09.05.2003 um 19:00 Uhr von Gregor editiert. ]
-
zitiere mich bitte ganz.
ich sagte: weil math zufällig auch was anderes sein kann.
zB Maxi Hubers neue supa dupa geile library.ob statische imports der sprache gut tun würde ich bezweifeln...
ein using namespace std; schreibe ich höchstens aus faulheit.das einzige was sinnvoll ist (obwohl ichs auch nicht verwende) ist using std::string; (oder dergleichen)
IMHO verleitet das dazu schlampig zu werden und vorallem verleitet es dazu den sinn von namespaces zu umgehen...
-
Original erstellt von Shade Of Mine:
**zitiere mich bitte ganz.
**OK:
Original erstellt von Shade Of Mine:
**was wenn ich nämlich math nicht kenne? (weil es uU nicht math sondern foobar ist - und das ist was total super tolles was nicht jeder kennt) - dann würde ich verzweifelt nach der foobar deklaration suchen
**...dann hast du Glück, dass Java ausgezeichnet dokumentiert ist. So findest du meistens in kürzester Zeit, was du brauchst.
...und solche Funktionen, wie sqrt findet man ja sowieso in jedem Standard-Javabuch im Inhaltsverzeichnis. <- (Dieser Satz bezieht sich nur auf dein Beispiel)
-
wenn es dann gefinkelter wird macht es auch mit C++ und allen feinheiten davon (Templates, namespaces, STL, destruktoren, ....) mehr spass und ist auch sinnvoller
ich weiß zwar nicht was "gefinkelter" bedeutet, aber die von dir aufgezählten Dinge sind mit Ausnahme von Templates (und das solls angeblich bald ebenfalls in Java geben) alles Sachen für die es in Java was Äquivalentes gibt:
namespaces -> Klassen und Packages
STL-> java.util und andere Teile des JDKs
Destruktoren -> Methode finalize
-
Also ich weiß nicht. In Java werden Classen als Namespace missbraucht. Wie grausam. Programmiert auf keinen Fall Java, die benutzen einen Trick, weil die Sprache ein Feature nicht unterstüzt.
Oh. Und bitte programmiert alle kein C++, weil da unmengen an Tricks verwendet werden, um irgendwelche Features, die man gerne hätte nachzubauen. Beispielsweise bei www.gotw.ca findet man eine ganze menge davon, aber auch hier im C++-Forum wurde schon öfters soetwas diskutiert (bsp. Überladung anhand der Rückgabe).
Ich glaube ich sollte komplett aufhören zu Programmieren, da es wohl keine Sprache gibt, in der es alle Features gibt, die ich vielleicht mal brauchen könnte.
-
btw. wenn ja streng OOP wär, dann sollte ja folgendes gehen
1.add(2)
weil 1 ja eigentlich eine Instanz von int sein sollte
in den totalen OO Sprachen wie Smalltalk und Ruby ist das ja so!
-
Dafür hat Java aber entsprechende Wrapper Klassen.Man kann jetzt darüber streiten ob ein Wert auch gleichzeitig ein Objeckt sein sollte. In anderen OOP Sprachen sind auch ganze Codefragmente ein Objekt. Kennt C++ auch nicht!
Ist ohnehin ne Diskussion ohne EndeMfG Spacelord
-
namespaces -> Klassen und Packages
STL-> java.util und andere Teile des JDKs
Destruktoren -> Methode finalizenamespaces und Packages unterscheiden sich schon etwas
einfachstes beispiel: du kannst nicht sagen use "Package" in java
du kannst es nur importieren
und sobald du jede Menge Packages.* inkludierst
kann es schon vorkommen das du zB
Element el = e.getElement(1);
machst und der compiler liefert ambiguous Class Name Element - org.w3c.dom.Element und irgendwas.sax.Element gibt es da zum beispielich weiss schon das man eigentlich nichtmit .* importieren sollte und mache es auch nicht - nur ein beispiel
in C++ wuerde ich zB namespace org.w3c.dom nehmen und das funktioniert dann schon
STL-> java.util und andere Teile des JDKs
stl und java.util kann man nun nicht ganz vergleichen da die STL ja die standard template libary ist und java wie du auch sagst keine templates unterstuetzt - und templates sind schneller als die nutzung genereller klassen
ausserdem spart man sich das ganze castenDestuktoren und finalize sind fuer mich unterschiedlich
da ich in finalize ja keinen speicher freigebe
ich mache nur abschluss arbeiten vor dem entladen
in C++ jedoch sage jedoch auch ich was ich freigeben will (und muss)
und weiss genau wann welcher speicher freigegeben ist
und das ist bei geringem speicherverbrauch halt wichtig
die GC schluckt halt zeit und speicher als auch das es laenger dauert bis das ganze freigegeben ist
-
die GC schluckt halt zeit
Der GC schluckt so gut wie keine Zeit. AFAIK ist der GC in Java sehr effizient.
Siehe zum Beispiel hier: Wie heißt der Nachfolger ...
namespaces und Packages unterscheiden sich schon etwas
einfachstes beispiel: du kannst nicht sagen use "Package" in java
du kannst es nur importieren
und sobald du jede Menge Packages.* inkludierst
kann es schon vorkommen das du zB
Element el = e.getElement(1);
machst und der compiler liefert ambiguous Class Name Element - org.w3c.dom.Element und irgendwas.sax.Element gibt es da zum beispielich weiss schon das man eigentlich nichtmit .* importieren sollte und mache es auch nicht - nur ein beispiel
in C++ wuerde ich zB namespace org.w3c.dom nehmen und das funktioniert dann schon
Ich verstehe nicht ganz, was du hier sagen willst. Stört es dich, dass Java meckert, wenn du Mehrdeutigkeiten in deinen Code eingebaut hast?
Was macht denn C++, wenn du 2 Namespaces mit "using" einbindest, die beide eine Funktion mit dem gleichen Namen beinhalten?