C++ vs Java

the_duke_at

Grünschnabel
Hi

Ich stehe vor der(bahnbrechend wichtigen*gg*) Entscheidung ob ich mich näher mit C++ oder mit Java beschäftige.
Ich nehme nicht an das prinzipiell eins von beiden besser is, das kommt sicher ganz auf den Bereich an.
Aber wo liegen die Vorteile von C++ und wo die von Java?
 
also das wichtigste zuerst:

Java ist Plattformunabhängig. Man brauchein Programm nur einmal programmieren udn es geht auf Windows, Linus und MacOS. Bei C++ muss das Programm immer den Bibliotheken entsprechend angepasst sein, weil die Betriebssysteme eigene verwenden.

Großer Nachteil von Java: man kann (noch) nicht auf Daten zugreifen, speichern oder versenden. Aber ich glaube das ist in Planung, um es wieder attraktiver zu machen, was halt das Aufgabenspezifische ausmacht.
 
Das mit den Bibliotheken ist nicht ganz richtig. Auch mit C++ kann man (wenn man sich an die Einschränkungen hält, die man dabei bekommt), Anwendungen entwickeln, die sich sowohl für Linux als auch für Windows oder andere Plattformen kompilieren lassen. Man denke beispielsweise an Gtk+ oder Qt. Java bringt den Vorteil mit sich, dass es nur einmal kompiliert wird, danach aber diese Binärversion der Anwendung auf so ziemlich allen erdenklichen Plattformen laufen kann.
Das liegt daran, dass Java nicht direkt vom Prozessor ausgeführt wird, sondern von einer Zwischenschicht, der virtuellen Maschine. Als "Nachteil" bekommt man dafür allerdings eine etwas langsamere Ausführung der Anwendungen, was aber in den meisten Einsatzgebieten von Java nicht auffallen wird.
Ein weiterer Vorteil von Java ist die leichtere Erlernbarkeit gegenüber C++.

Großer Nachteil von Java: man kann (noch) nicht auf Daten zugreifen, speichern oder versenden. Aber ich glaube das ist in Planung, um es wieder attraktiver zu machen, was halt das Aufgabenspezifische ausmacht.
Woher hast Du denn die Informationen, dass man mit Java nicht auf Daten und Dateien zugreifen kann, um diese zu speichern oder zu versenden?

Typische Einsatzgebiete von C oder C++ sind unter anderem hardwarenahe Anwendungen (wie z.B. 3D-Spiele), Anwendungen und Bibliotheken, die schnell ausgeführt werden müssen (wie z.B. Steuerelemente unter Windows) und andere Dinge.
Java ist im Serverbereich eher zu finden als C++, was nicht zuletzt daran liegt, dass die J2EE-Technologie sich sehr gut für mächtige Webanwendungen eignet. Mit AWT, Swing und SWT oder auch Gtk kann Java für Desktop-Anwendungen genauso genutzt werden, wie andere Sprachen, nur mit dem Vorteil, dass die daraus resultierenden Ergebnisse unabhängig vom Betriebssystem laufen. Und wie schon gesagt: Java ist viel einfacher zu lernen.

PS: Radhad, halte Dich im Bezug auf Deine Rechtschreibung bitte an unsere Netiquette.
 
Hallo Leute,

ich hab mir zuerst Java beigebracht und muss jetzt wegen des Studiums C und jetzt C++ lernen.

Und ich muss sagen, dass ich einige Vorteile von Java bei C++ und vor allem bei C vermisst habe. Java ist sehr leicht zu erlernen und bietet guten Komfort für den Programmierer. Man kann objektorientierte Sachen verwenden ohne wirklich davon eine Ahnung zu haben. Man hat eine automatische Speicherverwaltung, einen Compiler der alle erdenklichen Sachen prüft, man nutzt Referenzen und Pointer ohne zu wissen was das ist.

C++ kommt nicht an diesen Komfort ran, ist von daher etwas schwerer zu lernen, wie ich finde. Dennoch denke ich das C++ lernen mehr Wissen liefert als Java. Bei C++ lernt man noch das Strings eigentlich Char-Arrays sind und dass manche Funktionen in Java überladene Funktionen sind... Es geht also mehr in die Tiefe wie ich finde...

Ich denke das Java die bessere Wahl wäre. J2EE ist sehr mächtig und zukunftssicher. Es ist einfach zu lernen und Objekte und Klassen lassen komplexe Aufgaben leichter werden...
 
Ich kann mich prinzipiell an ByteDiggers Meinung anschließen.

Java hat halt seine Vorteile weil es rein Objektorientiert ist und viele Sachen für einen erledigt werden (z.B.: Speicherverwaltung-GarbageCollector, keine Zeiger etc.)

Bei C/C++ ist man näher an dem Computer dran, man kann zumindest näher verstehen wie den intern der Speicher verwaltet wird und was Referenzen sind. Man hat auch mehr Freiheiten bezüglich den Zugriffen diese bürgen natürlich auch gefahren weil man was "kaputt" machen kann (Beispiele: Zeiger spielerein). Vorallem wenn man auch mal Assembler gemacht hat sieht man doch viele parallelen zwischen den beiden.

Die Frage ist wozu du die Sprache lernen willst / sprich was für Programme du machen willst.

Aber egal welche Sprache du lernst, das wichtige ist zu lernen was if,else, while, for sind , wie man diese verwendet und wie man eine Idee in Code umwandelt.
Ob nun objektorientiert (C++,Java,...) oder nicht (C, Pascal,...) ist da eher schnurz.
Viele Sagen auch Informatiker bevorzugen Java und Elektrotechniker eher C/C++ (weil wir nix anderes können) aber das würde die Wahrheit auch nicht treffen ;)

Also wünsche dir viel Erfolg und viel Spaß !
 
hmm+
also 1. mal ich hab keine Ahnung wieso aber C++ find ich irgendwie symathischer*gg*
und Sachen wie die ganzzen Schleifen(while, do while, for ) und switch und dieser dreck mit ? : (ka wie das heisst) kann ich ja schon und was Pointer sind und wie man mit ihnen umgeht weiß ich auch(nur den Nutzen versteh ich noch immer nicht ganz*gg*)
ich hab auch schon 2 Jahre VB geproggt

ehrlich gesagt hab ich keine Ahnung was ich programmieren will auf lange sicht gesehn
aber ich will es auf jeden Fall berufsmäßig machen

und irgendwie sagt mir auch Netzwerkprogrammierung ziemlich zu

also ich hab einmal ein bisschen mit sockets rumgespielt aber es gibt ja noch andere Methoden für Netzwerk bzw Internetprogrammierung in C++ oder?

könnte jemand vl die Güte haben mir die etwas näher zu erläutern?
(ich finde nämlich auch im Internet nicht wirklich was dazu!)
 
Sockets habe ich auch schon gemacht, allerdings nur in Java.
Da geht das sehr leicht und bereits mit 5-6 Zeilen Code hat man was
übers Netzwerk geschickt.
Unter C++ kann ich nix dazu sagen. Schau dir hier unter den Tutorials C++ Windows Netzwerk durchsuchen an... Da vergeht mir alles.

Aber grad für Internetprogrammierung finde ich Java ideal.
Plattformunabhängig, und auch in Hinsicht JavaServlets (und auch die NetBeans, soweit ich weis sind das wiederverwendbare GUI-Objekte fürs INet) oder das verwandte JavaScript nicht zu verachten.

Wenn du ja alles schon kannst dann lern Java, die Grundlagen die dahinter stecken kannst du dann ja schon weshalb sich C++ erledigt.

Aber du musst es ja wissen...
 
Ich weiß, die Antwort kommt recht spät, schuldigung.

Also, ich tendiere auch mehr zu C/C++. Die Gründe sind für mich ganz einfach.

C/C++ ist einfach die bessere Sprache, weil ausgereifter. Bei Java gab es einen Bruch beim Umstieg auf V1.2 (ok, ist schon Jahre her, aber wer weiß, ob es nicht nochmal vorkommt). Da wurden ganz viele Sachen einfach herausgenommen, funktionieren nun ander usw.
Bei C/C++, wie die Schreibweise es schon andeutet, kann man ganz locker Code in einer Mischform schreiben, so dass man z. B. das komplette Klasenmodell von C++ verwendet, für io-Schnittstellen aber auf C zurückgreift (printf(), fopen(), usw.). Dies wird sogar von vielen Programmierern empfohlen. Einen Vorteil den ich dabei sehe ist vor allem, dass man C++ Programme schreiben kann, ohne C zu verlernen. Viele Programme sind in C geschrieben, so dass man sich hier auch gut auskennen sollte( Linux-Kernel, Samba, Apache, KDE, Gnome, Ethereal, usw. usf.).
Ein wieterer Vorteil ist, dass C/C++ eine Kompiler-Sprache ist. Richtig, man muss die sourcen auf allen Plattformen neu kompilieren, aber ist das einmal getan (und sourceforge hat eine Kompilefarm!), dann laufen die Programme direkt und nicht innerhalb einer 90MB großen Virtual-Mashine, die mal eben für ein kleines Programm in den Spiecher geladen werden muss und mehr Löcher als Wände aufweist, was Sicherheit anbelangt.

Davon mal abgesehen ist es lange nicht so, dass ein Java-Porgramm auf jeder Plattform läuft. In der Theorie ist es so, aber solles dann wirklich so sein, dann muss man sich schon an gewisse Regeln halten, die man aber auch locker mit C/C++ einhalten kann.

Fazit:
Es spricht alles für C/C++. Nicht zuletzt, da Du hier "richtiges" Programmieren lernt.

Mal noch ein anderer Punkt:
Erlernen sollte man das objektorientierte Denken oder das Denken, wie es ein Programm tut. In welcher Sprache man das Programm dann schreibt, ist fast Nebensache. Es wäre auch Nebensache diese Info in Englisch zu verfassen!

Grüße,

Hela
 
C/C++ ist einfach die bessere Sprache, weil ausgereifter

1.) Java hat seine Sprachmittel nur abwärtskompatibel geändert.
2.) Sun ändert natürlich die API der Java Bibliotheken. Diese Änderungen sind jedoch vertretbar.

Bei C/C++, ..., kann man ganz locker Code in einer Mischform schreiben, so dass man z. B. das komplette Klasenmodell von C++ verwendet, für io-Schnittstellen aber auf C zurückgreift

Was ist denn das "komplette Klasenmodell" von C++? Du meinst Du kannst OO und funktionale Programmierung mischen.
Das ist aber auch kein Vorteil, das zeigt nur dass dir die IO-Stream Klassen der STL zu kompliziert sind, bzw. das es technische Mängel gibt, die dich dazu bewegen sie nicht einzusetzen.

Das ist doch ein klarer Nachteil von C/C++ und ein Vorteil von Java. Da ist nämlich die gesamte API so, dass man sie auch verwenden kann.

Viele Programme sind in C geschrieben, so dass man sich hier auch gut auskennen sollte

Lasse ich gelten. Wer C/C++ Programm ändern / warten möchte, der sollte C/C++ können.


Ein wieterer Vorteil ist, dass C/C++ eine Kompiler-Sprache ist. Richtig, man muss die sourcen auf allen Plattformen neu kompilieren, aber ist das einmal getan (und sourceforge hat eine Kompilefarm!)

Um ein C/C++ Programm auf anderen Plattformen kompilieren zu können, muss der Programmierer sehr umsichtig gewesen sein und er durfte keine Plattformabhängigen APIs verwendet haben.

Fakt ist, dass ein Java Programm einmal kompiliert auf vielen Plattformen läuft. Natürlich gibt es Pitfalls, aber das sind eher die Ausnahmen.


nicht innerhalb einer 90MB großen Virtual-Mashine, die mal eben für ein kleines Programm in den Spiecher geladen werden

Stimme ich zu 100% zu. Ist sehr ärgerlich und IMHO *der* Grund kein Java einzusetzen.

und mehr Löcher als Wände aufweist, was Sicherheit anbelangt.

a) Die Sprache C/C++, sowie die mir bekannte C-Runtime-Libs besitzen kein Security-Konzept
b) Java hat ein solches Konzept, nur ist das für Java-Applicationen meistens irrelevant.

... Nicht zuletzt, da Du hier "richtiges" Programmieren lernt.

Was ist denn "richtiges" programmieren. Klingt nach trollen, wenn Du mich fragst.


Fazit:

Jede Anwendung hat eine bevorzugte Programmiersprache. Sowohl Java also auch C/C++ hat eine Exsistensberechtigung.
 
Zurück