Hallo,
das leuchtet mir ein. Allerdings ist Java konsequenter als C++ auf OOP hin ausgelegt. Objektorientierung ist aber per se anspruchsvoller, weil es von der alltäglichen Denkweise stark abweicht: Wenn jemand sieht, dass im Garten der Rasen gemäht werden muss, dann sieht er nicht das Objekt Garten.Rasen und die Methode Garten.Rasen.maehen(englisch-kurz), sondern die meisten Leute sehen die Arbeit Schritt für Schritt: Rasenmäher aus der Garage holen, Rasenmähermotor starten, mähen, Grasschnitt zusammenrechen, Rasenmäher putzen und aufräumen.
Pseudocode:
Garage garage = new Garage();
Rasenmäher mäher = garage.getRasenmäher();
mäher.start();
mäher.mäh(Grundstück.getRasen());
zusammenrechen();
putzen(mäher);
aufräumen();
Was ist daran jetzt nicht Schritt für Schritt? Ich für meinen Teil finde die objektorientierte Denkweise ziemlich alltäglich.
Wir denken im Alltag überwiegend prozedural, eine objektorientierte Sprache bedeutet also, sich von vornherein ein neues Paradigma anzutrainieren. In C++ kann ich dagegen zunächst intuitiv prozedural anfangen, und die OOP-Features allmählich erlernen und einsetzen, wo sie sinnvoll sind.
Du kannst auch in Java "intuitiv prozedural" programmieren. Schreib dir eine Klasse und verwende ausschließlich statische Methoden und statische Klassenvariablen als globale Variablen und schon kannst du prozedural programmieren.
Nein, es sind schon zwei Sprachen. Aber C++ ist im Wesentlichen zu C abwärtskompatibel - vor allem, wenn man die Schlampereien, die C++ zulässt, nicht ausnutzt, sondern weiterhin Disziplin walten lässt (z.B. alle Bezeichner ordentlich am Anfang eines Blocks deklariert). Wegen der Verwandtschaft nenne ich die beiden Sprachen daher normalerweise in einem Atemzug. Wer C++ lernt, hat meiner Ansicht nach automatisch C mitgelernt.
Variablen dann zu deklarieren wenn man sie braucht ist IMHO keine Schlamperei sondern der einzig richtige Weg. Variablen sollte man idealerweise bei ihrer ersten Benutzung deklarieren und zwar so, dass sie nur in einem möglichst kleinen Bereich gültig sind und anschließend automatisch zerstört werden.
Und meiner Meinung nach hat nur derjenige der C-artiges C++ lernt C automatisch mitgelernt. Ich behaupte man kann in C++ zwar wie in C programmieren, aber wer sich auf die Denkweise von C++ einlässt der arbeitet grundsätzlich anders als ein C-Programmierer.
Das Problem mit den alten Büchern ist, dass sie nur selten die Möglichkeiten von C++98 und vorallem der STL nutzen.
Das gilt nun speziell für C++, nicht für C.
Ich dachte hier ginge es ums C++-Lernen? Mit dem Stand der C-Bücher kenne ich mich nicht aus.
Außerdem fangen viele Bücher viel zu früh mit Zeigern und char-Arrays an.
Ansichtssache. Ich finde, man kann gar nicht zu früh damit anfangen, weil es das Verständnis für die interne Logik und die Abläufe (und auch mögliche Fehler) erheblich fördert.
Ja das ist durchaus Ansichtssache und ich halte es ebenfalls für wichtig die interne Logik kennenzulernen. Aber die meißten Anfänger wollen doch erstmal schnell Ergebnisse sehen, oder nicht? Und dazu denke ich sind std::string und std::vector gut geeignet, weil sie weniger fehleranfällig sind als die Arbeit mit char[] und new/delete.
Auch wenn es C++ schon sehr lange gibt, so entwickelt sich die Sprache trotzdem immer noch weiter. Schau dir mal die Boost-Bibliotheken an, wenn dich interessiert was mit "modernem" C++ alles möglich ist und ich denke so hat man vor 10 Jahren C++ noch nicht verwendet.
Ich kenne keine Boost-Bibliotheken, und es interessiert mich auch nicht so brennend, weil ich normalerweise einen Bogen um C++ mache (wenn ich nicht zur Verwendung gezwungen bin) und lieber traditionelles C benutze.
Wenn du dich noch nicht wirklich mit C++ beschäftigt hast dann macht eine Diskussion C vs. C++ in meinen Augen an dieser Stelle wenig Sinn.
Ich könnte mir vorstllen, dass die Standardschnittstelle für Windows-Betriebssysteme, die WinAPI gemeint war.
Das ergibt wenig Sinn, denn auf die kann man sich *immer* verlassen, wenn man für die Plattform "Windows" entwickelt.
dazu müsste man jetzt den Originalartikel kennen, aber vielleicht fällt dieser Punkt ja auch in die Kategorie "Ansischtssache" ;-)
Gruss,
OhneName