Nachteile von Java gegenüber C++?
-
Hi zusammen,
gibt es eigentlich noch andere Nachteile von Java gegenüber C++ außer die Geschwindigkeit??
Fallen euch da noch welche ein?
gruß,
jörk
-
Das wurde so oft und detailliert diskutiert, dass es evtl. sinnvoller ist, zunächst über "Suche" die Argumente zu studieren und anschließend nur ausgewählte konkrete Punkte weiter zu erörtern. Beide Sprachen haben ihre Berechtigung und werden breit eingesetzt.
-
Ja, Java kennt keine Zeiger und Mehrfachvererbung.
-
Schnagger schrieb:
Ja, Java kennt keine Zeiger und Mehrfachvererbung.
[flame]
Wieso ist das ein nachteil? Das ist doch eindeutig ein vorteil! [/flame]
-
Blödsinn! In C++ ist niemand gezwungen, Zeiger oder Mehrfachvererbung einzusetzen. Also ist das für C++ kein Nachteil, sondern ein Vorteil, da man dennoch die Entscheidungsfreiheit hat, es im Einzelfall doch zu machen. Der Programmierer soll entscheiden können, was er im konkreten Fall einsetzt.
Wie gesagt, beide Sprachen sind einsetzbar, vorzuziehen ist C++ wegen der größeren Freiheitsgrade und Vielseitigkeit. Templates und die STL sind in C++ wirklich interessant.Bei Java sehe ich nur den Vorteil, schnell an GUI-Programme im Windows-Stil zu kommen. Da fehlt bei C++ eine allgemein bekannte GUI-Bibliothek. WinAPI und MFC sind an MS Windows gebunden. Das ist ein großer Nachteil.
-
xroads42 schrieb:
Schnagger schrieb:
Ja, Java kennt keine Zeiger und Mehrfachvererbung.
[flame]
Wieso ist das ein nachteil? Das ist doch eindeutig ein vorteil! [/flame]Wie sortierst du in Java ein Array gefüllt mit Strings?
(Von mir aus auch 2 Arrays mit Char Zeichen char[][], für diejenigen dies genauer haben wollen bzw. für C gültig haben wollen)In C++ sortierst du einfach ein Array von Zeigern die auf die Strings zeigen,
anstatt ein Array mit Strings.
Das geht viel schneller und ist somit performanter.
-
Bei Java sehe ich nur den Vorteil, schnell an GUI-Programme im Windows-Stil zu kommen. Da fehlt bei C++ eine allgemein bekannte GUI-Bibliothek.
Aber mal abgesehen von dem GUI Teil, hat Java eine viel umfangreichere Standardbibliothek.
-
Schnagger schrieb:
In C++ sortierst du einfach ein Array von Zeigern die auf die Strings zeigen,
anstatt ein Array mit Strings.
Das geht viel schneller und ist somit performanter.In Java machst du es genauso. Im Array selbst stehen bei einem String-Array in Java nicht Strings, sondern Referenzen auf die Strings. Die kannst du auch ganz einfach vertauschen etc.!
Vielleicht solltest du dich mal mit Java auseinandersetzen, anstatt dein Unwissen zum Besten zu geben.
-
Ich habe nie Java programmiert, sondern nur darüber gelesen. Also bitte mit Vorsicht genießen.
Nachteile von Java (außer den hier genannten):
- Kein explizites Zerstören von Objekten möglich. Dadurch ist der Nutzen von Destruktoren sehr eingeschränkt.
- Schwache Semantik. "int i;" deklariert ein Objekt, während "MyClass mc;" einen Verweis auf ein Objekt deklariert.
- Keine echten lokalen Objekte, außer bei eingebauten Typen.
- Keine Möglichkeit, Operatoren zu überladen.
- Keine Templates (das hatten wir schon) und daraus folgend viele Casts, kein Metaprogramming (man sehe sich nur boost oder loki an, was damit alles möglich ist!) und vermutlich auch viel doppelter Code im Projekt.
- Wegen Garbage Collection ist das Laufzeitverhalten eines Programms schwer zu ermitteln geschweige denn zu garantieren. Dito Speicherverhalten.
- Keine echte Mehrfachvererbung
- Keine Unterscheidung zwischen Schnittstelle und Implementierung (*.hpp vs. *.cpp).
- .....Stefan.
-
also ich finde die fehlende mehrfachvererbung ist ein plus von
java (oder zumindest kein nachteil). die bringt naemlich nur viele
probleme. vielleicht nicht beim entstehen eines projektes, aber
spaeter bei der wartung.die unterscheidung zwischen schnittstelle und implementierung ist
kein nachteil. bei jedem jdk ist ein javadoc-tool dabei, das
laesst du einmal drueber laufen und schon hast du eine huebsche
dokumentation.was ein grosser nachteil von java ist, ist das fehlen von konstanten,
bei einer uebergabe an funktionen.
-
entelechie schrieb:
also ich finde die fehlende mehrfachvererbung ist ein plus von
java (oder zumindest kein nachteil).Also fehlende Funktionalität sehe ich als Nachteil. Wie gesagt: In C++ ist keiner gezwungen das einzusetzen.
-
naja, was bringt dir die funktionalitaet, wenn sie
spaeter nur probleme bereitet?
das konzept von java, mehrfachvererbung nur bei interfaces
zu erlauben ist sauberer.
die klare unterteilung von java in klassen, interfaces und abstrakte
klassen ist ein klarer vorteil gegenueber c++.
-
entelechie schrieb:
naja, was bringt dir die funktionalitaet, wenn sie
spaeter nur probleme bereitet?Also ich weiß nicht wo die Probleme liegen sollen. Das ist ein ähnliches Argument wie "Pointer sind doof. Damit kann ich mein Programm puttemachen. Deshalb will ich eine Programmiersprache die das nicht kann."
-
Für Policys ist Mehrfachvererbung zum Teil unumgänglich. Und man hat nur Vor und keine Nachteile.
Und wenn alle Mehrdeutigkeiten Aufgelöst werden, was eigentlich kein Problem ist, bekommt man auch keine Probleme mit dem polymorphen Verhalten.
Nur Diamantstrukturen können Probleme bereiten. Aber wieso solltest du Sie aufbauen?
-
entelechie schrieb:
naja, was bringt dir die funktionalitaet, wenn sie
spaeter nur probleme bereitet?
das konzept von java, mehrfachvererbung nur bei interfaces
zu erlauben ist sauberer.
die klare unterteilung von java in klassen, interfaces und abstrakte
klassen ist ein klarer vorteil gegenueber c++.ich find Mehrfachvererbung insofern sinnvoll, da man damit Funktionalitaet einfach weitervererben kann... und Referenzen haben IMO immer den Nachteil, dass sie auch auf was zeigen muessen (NULL-Zeiger sind imo was feines
). Klassen Interfaces und Abstrakte Klassen kann man in C++ genauso trennen, nur _muss_ man es nicht... man hat eben viel mehr Freiheiten...
die unterscheidung zwischen schnittstelle und implementierung ist
kein nachteil. bei jedem jdk ist ein javadoc-tool dabei, das
laesst du einmal drueber laufen und schon hast du eine huebsche
dokumentation.wenn denn gut dokumentiert wurde... ein schneller Blick in den Header ist da IMO mindestens gleich Aufschlussreich... und nebenbei gibts doxygen ja auch fuer C++...
Meine Meinung als jemand, der noch nie Java geschrieben hat
Aber IMO laeuft die Diskussion doch einfach darauf hinaus, dass dich Java an gewisse Dinge bindet (um nicht zu sagen "sie dir aufzwingt")... schoen und gut wenn ich nicht programmieren kann, so kann ich mir wenigstens nicht den Stil versauen... Aber mit C++ kann ich eben die selben Dinge (Implementierung/Schnittstelle auf einem Haufen, javadoc, usw.) auch... nur bin ich nicht dazu gezwungen, sondern habe wesentlich mehr Freiheiten... es als Vorteil anzusehen dass man in Java das tun _muss_ was man in C++ tun _kann_, ist IMO falsch
Ein Vorteil von java ist, dass es wirklich plattformunabhaengig ist, auch ohne Neukompilierung... Da kann C++ wirklich nicht ganz (aber doch fast, wenn man richtig codet) mithalten... ( <flame> dafuer sehen die GUIs besch.... eiden aus</flame> <nochmehrflame> vom Speed gar nicht zu reden
</nochmehrflame> )
-
Blue-Tiger schrieb:
und Referenzen haben IMO immer den Nachteil, dass sie auch auf was zeigen muessen (NULL-Zeiger sind imo was feines
).
Wenn man keine Ahnung hat, einfach mal Fresse halten, sagt der Nuhr immer.
Meine Meinung als jemand, der noch nie Java geschrieben hat
Hätt ich jetzt nicht gedacht :p
-
Boah, nicht schon wieder ein Java vs C++ Thread !
Langsam nervt es echt etwas...
-
Blue-Tiger schrieb:
Ein Vorteil von java ist, dass es wirklich plattformunabhaengig ist, auch ohne Neukompilierung... Da kann C++ wirklich nicht ganz (aber doch fast, wenn man richtig codet) mithalten...
Auf verschiedenen Plattformen ausführbar ohne neukompilierung in C++
?
-
Mit Interpreter :p
-
Achso, C++ ist also neuerdings eine klassische Interpretersprache :p .