PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Buchempfehlung gesucht: C++ für JAVA-Umsteiger


Pinoccio
2008-09-12, 10:13:27
Hallo,

aus unabwendbaren Gründen darf ich mich in Zukunft in C++ ausdrücken. Da ich bisher nur* mit JAVA Umgang hatte, verwirrt mich das Konzept des Zeigers enorm.
Gibt es gute Bücher, die einem nicht ganz unerfahrenen JAVA-Programmierer den Einstieg in C++ möglichst angenehm und einfach machen? Alternativ ein gutes (Informatik-)Skript oder ein nettes Tutorial? Am liebsten auf deutsch, gerade die Feinheiten, was wo welches Objekt (meines Handelns, nicht im Sinne der Objekt-orientierten Programmierung) tun, sein und lassen kann sind womöglich das Entscheidende, wäre doch schade, wenn sowas aufgrund meiner Englischkenntnisse untergeht. Aber das kann man sich bei Fahcbüchern ja nie aussuchen ...

mfg


* Shellscripte, MATLAB/SCILAB und C64-BASIC anno dazumal zähle ich da mal nicht mit

rad05
2008-09-12, 11:23:40
Um Pointer richtig zu verstehen würde ich die ein C-Tutorial empfehlen, da die Pointer ja nicht direkt etwas mit OOP zu tun haben, sondern ja auch schon in C existiert haben. Da findest du sicher welche (auch in Deutsch) wenn du danach googelst.
Wichtig ist auch, dass du dir die Unterschiede zwischen Heap und Stack auch ansiehst, da das in Java doch ganz anders funktioniert. Den Garbage Collector wirst du noch oft vermissen.
Die Unterschiede aus OOP-Sicht finde ich nicht so groß, aber ich gebe dir recht, dass die Pointer anfangst schon sehr verwirrend sein können.

Gast
2008-09-12, 11:40:13
wieso sollte er den GC vermissen?

der ist doch eh so unzuverlässlich und kommt wann er will :)

Pinoccio
2008-09-12, 12:01:29
wieso sollte er den GC vermissen?

der ist doch eh so unzuverlässlich und kommt wann er will :)Naja, das mag sein, aber ich habe gelernt, mich darauf zu verlassen, daß ich mich nicht kümmern muß. Bei großen Projekten oder enormen Datenmengen mag das anders sein, aber für mich (und meine zukünftigen Programme) ist/war/wäre JAVAs GC völlig ausreichend.

mfg

rad05
2008-09-12, 14:02:00
wieso sollte er den GC vermissen?

der ist doch eh so unzuverlässlich und kommt wann er will :)

Du willst mir aber nicht erzählen, dass du in Java deine Objekte immer selbst zerstörst? Und bei 95% aller Programme ist es ziemlich egal wann der GC läuft.

The_Invisible
2008-09-12, 15:31:21
ich würde auch mit C anfangen und dann mit C++ weitermachen. C ist einfach noch ne ecke primitiver als C++, da kann man ohne Pointer zu verstehen fast gar nichts machen. außerdem kommt man auch mit C++ oft noch mit C in berührung, ich würde es also nicht auslassen.

ich empfehle da http://www.amazon.de/von-bis-umfassende-Handbuch-Windows/dp/3898426432/ref=sr_1_1?ie=UTF8&s=books&qid=1221226237&sr=8-1 und http://www.amazon.de/von-bis-Mit-CD-ROM-umfassende/dp/3898428168/ref=sr_1_2?ie=UTF8&s=books&qid=1221226264&sr=8-2

mfg

redfox
2008-09-12, 16:09:35
ack @The_Invisible
Ich kann die beiden Bücher auch empfehlen. Verständlich geschrieben mit schönen Beispielen.

Redfox

Frucht-Tiger
2008-09-12, 16:57:10
Einfach drauflos Bücher kaufen ist nie besonders sinnvoll, für den Überblick reicht auch erstmal das openbook C von A bis Z (http://www.galileocomputing.de/openbook/c_von_a_bis_z/).

Ansonsten ist die Zeiger-Thematik für jeden erstmal eine Hürde, aber mit Übung und etwas Zeit klappt das schon.

Gast
2008-09-17, 19:34:16
Hallo,

aus unabwendbaren Gründen darf ich mich in Zukunft in C++ ausdrücken. Da ich bisher nur* mit JAVA Umgang hatte, verwirrt mich das Konzept des Zeigers enorm.das kann ich ja überhaupt nicht verstehen. Zeiger gibt's auch in Java, die werden da nur nicht Zeiger genannt, sondern Objektreferenzen. Und man kann mit ihnen keine Zeigerarithmetik machen. Aber die gilt auch in C++ als unfein.

Unverzeihlich ist allerdings die javanische Terminologie, Klassen als Referenztypen zu bezeichnen. Es mag ja sein, dass in Java Objekte nur über Pointer, pardon, Referenzen angesprochen werden können, einer programmiersprachenübergreifenden Betrachtungsweise ist diese Sprechweise trotzdem abträglich, und erschwert nur den Umstieg zwischen Java und anderen Sprachen.

Noebbie
2008-09-17, 19:37:08
Unverzeihlich ist allerdings die javanische Terminologie, Klassen als Referenztypen zu bezeichnen. Es mag ja sein, dass in Java Objekte nur über Pointer, pardon, Referenzen angesprochen werden können, einer programmiersprachenübergreifenden Betrachtungsweise ist diese Sprechweise trotzdem abträglich, und erschwert nur den Umstieg zwischen Java und anderen Sprachen.

Ohja! Nachdem ich mich bestens an Java gewöhnt hatte, gings im Studium mit C++ los und ich verstand zu Beginn die Welt nicht mehr in Bezug zu Referenzen, ähh Pointer. Das war für mich schon ne große Umgewöhnung.

Coda
2008-09-17, 19:41:40
Es ist meiner Meinung anch nicht möglich effizient zu programmieren ohne die grundlegenden Konzepte der Arbeitsweise eines Computers verstanden zu haben.

Das ist genau das Problem wenn man mit Java anfängt und sich nie mit etwas anderem beschäftigt.

Trap
2008-09-17, 20:09:45
Für effiziente Algorithmen muss man kein besonderes Hardwareverständnis haben, für effiziente Implementierung der Algorithmen ist es aber meist nötig.

Die umgekehrte Kombination ist nicht besser, ineffiziente Algorithmen sind auch mit perfekter Implementierung noch lahm.

Noch was zum eigentlichen Thema: Ich finde "Accelerated C++" bzw. auf deutsch "Intensivkurs C++" ziemlich gut, als Java-Wechsler ist viel davon Wiederholung, aber es geht auch sinnvoll auf Zeiger ein und vor allem hat es viele Beispielanwendungen mit sehr gutem und idiomatisch geschriebenen C++ Code.

Shink
2008-09-18, 09:49:11
Hmm... ich hab im Beruf jahrelang hauptsächlich mit Java zu tun, aber auch mit C#, C und Ada (soll heißen: ich weiß was Pointer sind). Trotzdem find ich mich in C++-Code am wenigstens zurecht.

Gibt es da tatsächlich kein Tutorial für so eine Zielgruppe?

Übrigens würde ich nicht wirklich empfehlen C zu lernen um C++ zu lernen. Dafür gibts imo zu viel schlechte Angewohnheiten die man bei C braucht und einfach nicht nach C++ rüberretten muss.

The_Invisible
2008-09-18, 10:45:23
Übrigens würde ich nicht wirklich empfehlen C zu lernen um C++ zu lernen. Dafür gibts imo zu viel schlechte Angewohnheiten die man bei C braucht und einfach nicht nach C++ rüberretten muss.

vor allem in linux sind noch sehr viele bibliotheken in C geschrieben. wenn man die benutzen will kommt man um C nicht herum. es gibt für die bekannten sachen zwar c++ wrapper, aber sind auch nicht immer das wahre.

und wenn dann mal ein char ***ptr datentyp gefordert ist steht man als C kenner auch nicht im regen.

mfg

Pinoccio
2008-09-18, 13:25:24
Einfach drauflos Bücher kaufen ist nie besonders sinnvoll, für den Überblick reicht auch erstmal das openbook C von A bis Z (http://www.galileocomputing.de/openbook/c_von_a_bis_z/).Danke für den Link, auch allen anderen Vorschlägern.
Es ist meiner Meinung anch nicht möglich effizient zu programmieren ohne die grundlegenden Konzepte der Arbeitsweise eines Computers verstanden zu haben.

Das ist genau das Problem wenn man mit Java anfängt und sich nie mit etwas anderem beschäftigt.Ich hab mit HTML angefangen zu Programmieren! :P
(Obiges ist ein Scherz zur Auflockerung der Diskussion.)
Im Ernst: was genau meinst du mit den grundlegenden Konzepte[n] der Arbeitsweise eines Computers?

Für effiziente Algorithmen muss man kein besonderes Hardwareverständnis haben, für effiziente Implementierung der Algorithmen ist es aber meist nötig.

Die umgekehrte Kombination ist nicht besser, ineffiziente Algorithmen sind auch mit perfekter Implementierung noch lahm.

Noch was zum eigentlichen Thema: Ich finde "Accelerated C++" bzw. auf deutsch "Intensivkurs C++" ziemlich gut, als Java-Wechsler ist viel davon Wiederholung, aber es geht auch sinnvoll auf Zeiger ein und vor allem hat es viele Beispielanwendungen mit sehr gutem und idiomatisch geschriebenen C++ Code.Den ""Intensivkurs C++" (http://www.amazon.de/Intensivkurs-Schneller-Einstieg-%C3%BCber-Standardbibliothek/dp/3827372585)?
Was die effiziente Implementierung betrifft, so vermute ich mal, daß sich meine Programme sich zu 99% in schon fertigen, von C/C++-Kennern geschriebenen Bibliotheken aufhalten werden.

Ohja! Nachdem ich mich bestens an Java gewöhnt hatte, gings im Studium mit C++ los und ich verstand zu Beginn die Welt nicht mehr in Bezug zu Referenzen, ähh Pointer. Das war für mich schon ne große Umgewöhnung.Gibt es da tatsächlich kein Tutorial für so eine Zielgruppe?Viel schienbar nicht. :-(
Ich hab bislang nur diesen Kurs von Prof. Dr. Wolfgang Schramm, FH Mannheim (http://www.informatik.fh-mannheim.de/~schramm/ccpp/folien.html) gefunden. Sieht erstemal gut aus. :-)
/Edit: Link orrigiert, danke Shink!

BTW: Letztes Semester hatte ich einen FORTRAN-Kurs, da war die Umgewöhnung vermutlich noch schlimmer ...

mfg

Trap
2008-09-18, 13:51:32
Den ""Intensivkurs C++" (http://www.amazon.de/Intensivkurs-Schneller-Einstieg-%C3%BCber-Standardbibliothek/dp/3827372585)?
Ja, das Buch mein ich.

Das Buch zeigt einem wie man saubere, objektorientierte C++ Programme mit der Standardbibliothek schreibt (und hat viele sinnvolle Beispielaufgaben zum selber machen). Es ist keine Anleitung zu C, keine Sprachreferenz und keine lowlevel Optimierungsanleitung. Es erklärt nicht alles was es in C++ gibt und in Java nicht. Wenn du viel Code von anderen verändern musst, reicht das Buch allein nicht.

Die Herangehensweise sollte einem als Java-Programmierer liegen, die Programme sind von Anfang an aufbauend auf der Standardbibliothek und so weit sinnvoll auch objektorientiert. Ich weiß nicht genau wie viel davon mit Javakenntnissen Wiederholung ist, vielleicht 1/3 oder so. Trotzdem ist es sinnvoll alles zumindest querzulesen, damit man weiß wie man es in C++ schreiben muss.

Pinoccio
2008-09-18, 14:24:38
Ja, das Buch mein ich.

Das Buch zeigt einem wie man saubere, objektorientierte C++ Programme mit der Standardbibliothek schreibt (und hat viele sinnvolle Beispielaufgaben zum selber machen). Es ist keine Anleitung zu C, keine Sprachreferenz und keine lowlevel Optimierungsanleitung. Es erklärt nicht alles was es in C++ gibt und in Java nicht. Wenn du viel Code von anderen verändern musst, reicht das Buch allein nicht.

Die Herangehensweise sollte einem als Java-Programmierer liegen, die Programme sind von Anfang an aufbauend auf der Standardbibliothek und so weit sinnvoll auch objektorientiert. Ich weiß nicht genau wie viel davon mit Javakenntnissen Wiederholung ist, vielleicht 1/3 oder so. Trotzdem ist es sinnvoll alles zumindest querzulesen, damit man weiß wie man es in C++ schreiben muss.Okay. Steht bei uns in der Uni-Bibliothek, da werd ich mal einen Blick reinwerfen.

mfg

Shink
2008-09-18, 15:08:05
Ich hab bislang nur diesen Kurs von Prof. Dr. Wolfgang Schramm, FH Mannheim (http://www.informatik.fh-mannheim.de/~schramm/ccpp/folien.html/) gefunden. Sieht erstemal gut aus. :-)
Hmm... im Link musst du denke ich den letzten Slash entfernen sonst geht das nicht.

BTW: Letztes Semester hatte ich einen FORTRAN-Kurs, da war die Umgewöhnung vermutlich noch schlimmer ...
Tja, in Fortran hab ich auch so einiges gemacht. Je nach Version sieht das imo wie Basic, C (Fortran 77) oder Objective C aus. Kann ich wie gesagt immer noch besser verstehen als C++.