Paar allgemeine Fragen zu Java :)
-
Hi,
ich hab' mich mit Java noch nie beschäftigt und habe auch nicht das Verlangen dazu, habe aber trotzdem ein paar Fragen, rein aus Interesse.Stimmt es, dass man in Java keine Operatoren überladen? Wenn ja, wieso?
Stimmt es, dass es in Java keine Templates gibt? Wenn ja, wieso? Und wie benutzt man dann STL ähnliche Container? Etwa alles mit Polymorphie?

Warum sollte Java denn OO-fähiger sein als C++? Weil man in C++ nicht dazu gezwungen wird?

-
auch-noch-fragen-haber schrieb:
Stimmt es, dass man in Java keine Operatoren überladen? Wenn ja, wieso?
Keine Ahnung was Du damit meinst.

auch-noch-fragen-haber schrieb:
Stimmt es, dass es in Java keine Templates gibt? Wenn ja, wieso? Und wie benutzt man dann STL ähnliche Container? Etwa alles mit Polymorphie?

Nein, das Stichwort lautet hier: Generics.

-
byto schrieb:
auch-noch-fragen-haber schrieb:
Stimmt es, dass man in Java keine Operatoren überladen? Wenn ja, wieso?
Keine Ahnung was Du damit meinst.

auch-noch-fragen-haber schrieb:
Stimmt es, dass es in Java keine Templates gibt? Wenn ja, wieso? Und wie benutzt man dann STL ähnliche Container? Etwa alles mit Polymorphie?

Nein, das Stichwort lautet hier: Generics.

aber die können viel weniger als Templates?
-
Ich kann kein C++, daher kann ich Dir die Frage nicht beantworten und zitiere stattdessen mal Wikipedia:
Ab Version 5.0 ("Tiger", 2004 veröffentlicht) steht auch in der Programmiersprache Java ein Sprachmittel für die generische Programmierung zur Verfügung - die so genannten Generics. Damit lassen sich Klassen und Methoden (Methoden auch unabhängig von ihren Klassen) mit Typen parametrisieren. Damit werden der Sprache einige ähnliche Möglichkeiten eröffnet, die sich vergleichbar bei den Templates in C++ bieten.
Prinzipiell gibt es aber durchaus wesentliche Unterschiede. Während in C++ über die Schnittstelle der Typparameter parametrisiert wird, wird in Java direkt über den Typ des Typparameters selber parametrisiert.
Beispielsweise bietet die Funktion std::sort in C++ die Möglichkeit, alle Container zu sortieren, die bestimmte Methoden anbieten (hier speziell begin() und end(), die jeweils einen iterator liefern) und deren Typparameter den 'operator<' implementiert (oder explizit eine andere Vergleichsfunktion angegeben wurde). Ein Nachteil, der sich durch dieses System ergibt, ist die (für den Programmierer!) schwierigere Übersetzung. Der Compiler hat keine andere Möglichkeit, als den Typparameter in jedem Fall durch den geforderten konkreten Typ zu ersetzen und den ganzen Code erneut zu compilieren.
Sehr leicht können bei unpassenden Typparametern und anderen Problemen komplizierte und unverständliche Compiler-Meldungen entstehen, was einfach mit der Tatsache zusammenhängt, dass die konkreten Anforderungen an den Typparametern unbekannt sind. Die Arbeit mit C++-Templates erfordert deshalb eine lückenlose Dokumentation der Anforderungen an einen Typparameter. Durch Template-Metaprogrammierung können die meisten Anforderungen (Basisklasse, Vorhandensein von Methoden, Kopierbarkeit, Zuweisbarkeit etc.) auch in speziellen Konstrukten abgefragt werden, wodurch sich lesbarere Fehlermeldungen geben. Obgleich sie standardkonform sind, werden diese Konstrukte jedoch nicht von allen Compilern unterstützt.
Dagegen sind den generischen Klassen und Methoden in Java die Anforderungen (engl. constraints) an ihre eigenen Typparameter bekannt. Um eine Collection zu sortieren, müssen die enthaltenen Elemente vom Typ Comparable sein, also dieses Interface implementiert haben¹. Der Compiler muss lediglich prüfen, ob der Typparameter einem Comparable entspricht und kann damit schon sicherstellen, dass der Code korrekt ist. Weiterhin wird ein und derselbe Code für alle konkreten Typen verwendet und nicht zigmal dupliziert. Dadurch ergibt sich allerdings auch eine geringere Spezialisierung des erzeugten Codes auf die einzelnen Typen, was sich in der Perfomance bemerkbar machen kann.
-
Stimmt es, dass man in Java keine Operatoren überladen? Wenn ja, wieso?
Gegenfrage: In welchen Situationen vermisst du denn diese Möglichkeit und nenn jetzt keine Beispiele wie Complex, BigInteger, ..?
-
qwerty` schrieb:
Stimmt es, dass man in Java keine Operatoren überladen? Wenn ja, wieso?
Gegenfrage: In welchen Situationen vermisst du denn diese Möglichkeit und nenn jetzt keine Beispiele wie Complex, BigInteger, ..?
Operatoren überladen ist eine vereinfachung und erhöhr die flexibilität!
-
Operatoren überladen ist eine vereinfachung und erhöhr die flexibilität!
Diese Antwort geht absolut an der Frage vorbei, da ich konkrete Situationen wissen wollte. Was du lieferst ist allgemeines, völlig unbegründetes Blabla, das nur den Flamewar in Gang bringen soll.
-
qwerty` schrieb:
Operatoren überladen ist eine vereinfachung und erhöhr die flexibilität!
Diese Antwort geht absolut an der Frage vorbei, da ich konkrete Situationen wissen wollte. Was du lieferst ist allgemeines, völlig unbegründetes Blabla, das nur den Flamewar in Gang bringen soll.
schau dir mal boost an für konkrete Situationen
-
qwerty` schrieb:
Operatoren überladen ist eine vereinfachung und erhöhr die flexibilität!
Diese Antwort geht absolut an der Frage vorbei, da ich konkrete Situationen wissen wollte. Was du lieferst ist allgemeines, völlig unbegründetes Blabla, das nur den Flamewar in Gang bringen soll.
So einen Idioten wie dich trifft man selten! Warte, ich zeichne kurzeeine Wegbeschreibung zu dir auf, damit auch andere über deine Dummheit lachen können.
Du bist sicher auch vom aussterben bedroht, denn wer will sich shcon mi dir paaren?
-
Back to Thema!

-
Die Vorenpolizei schrieb:
Back to Thema!

Ätsch! Du kriegst mich nicht!
-
schau dir mal boost an für konkrete Situationen
So gut dein Argument auch gemeint ist, aber entweder du nennst mir Beispiele oder du lässt es. Genauso gut könntest du auch gleich sagen: "Beschäftig dich einfach länger mit Operatoren-Überladung und dann fallen dir schon konkrete Beispiele ein." Ich hoffe halt, dass du jetzt nicht spirit und ähnlich unintuitive Beispiele nennst ..
So einen Idioten wie dich trifft man selten! Warte, ich zeichne kurzeeine Wegbeschreibung zu dir auf, damit auch andere über deine Dummheit lachen können.
Du bist sicher auch vom aussterben bedroht, denn wer will sich shcon mi dir paaren?
Wie natürlich eine derartige Reaktion doch ist, wenn man keine Gegen-Argumente hat ..
-
fred closed
-
atmin schrieb:
fred closedadmihn shcriebt man mit d und net t
-
qwerty` schrieb:
Stimmt es, dass man in Java keine Operatoren überladen? Wenn ja, wieso?
Gegenfrage: In welchen Situationen vermisst du denn diese Möglichkeit und nenn jetzt keine Beispiele wie Complex, BigInteger, ..?
<< und >> für streams
== != für alles mögliche
+ += für string-änliche klassen
= für schnelle copy construktoren'operator bool' ist auch cool (wobei das ja eigentlich kein operator im eigentlichen sinne ist)
und wieso soll man nicht BigInteger sagen? das ist doch geil das mal libs schreiben kann die sich wie buildin anfühlen
ist zwar alles nur syntax-zucker und man kommt ohne aus, aber es ist schon ein keiner vorteil (kein vorteil an den ich ausmachen würde ob java oder c++ ...)