Programmieren lernen - besser kein OOP.
-
Aprollo schrieb:
Wer zwingt den jemand das Schlüssewort class zu benutzen.
Ich. Weil: struct sieht so altmodisch aus.
-
muemmel schrieb:
es geht nicht darum, daß man dem Anfänger das umgehen mit char-Arrays abnehmen will, sondern daß er sich gar nicht erst angewöhnen soll alles im C-Stil zu machen, wenn er in Richtung C++ will. Sicher muß er das auch beherrschen, und wenn er das nicht frißt ist er bei C++ sowieso auf der falschen Schiene.
Um es noch mal auf den Punkt zu bringen: Ich bin der Meinung, daß ein C++-Programmierer-Anfänger vorher KEIN lupenreiner C-Programmierer werden muß. Denn SEIN Ziel ist nicht C-Programmierung, sondern C++-Programmierung. Aber er sollte auch nicht gleich mit der gesamten Komplexität der Sprache erschlagen werden.
Und er sollte sich KEINE C-Gewohnheiten zu eigen machen die in C++ deplaziert sind.Ziel kann es aus MEINER Sicht nicht sein, ihn erst zu einem C-Programmiere zu machen und ihn dann zu einem C++-Programmierer UMZUERZIEHEN, sondern ihn Schritt für Schritt stufenweise vom leichten zum schweren gleich C++ lernen zu lassen. Und aus meiner Sicht ist nun mal das Verstehen wie Rechner überhaupt ticken, also Anweisungen, Kontrollstrukturen, Funktionen ... die Basis die erst mal sitzen muß.
Ich weiß ja nicht, was man mit einem anfangen kann, der nur C++ Programmierer werden will. Es geht darum Programmieren zu lernen und da sollte man am Anfang die Grundlagen lernen ohne Libraries die einem alles abnehmen und ganz ohne "verstümmelte" OOP.
-
555-CARSERVICE schrieb:
Ich weiß ja nicht, was man mit einem anfangen kann, der nur C++ Programmierer werden will. Es geht darum Programmieren zu lernen und da sollte man am Anfang die Grundlagen lernen ohne Libraries die einem alles abnehmen und ganz ohne "verstümmelte" OOP.
Die Bibliothek möchte ich mal sehen, die einem alles abnimmt. Es kann sinnvoll sein wenn man sich auch mal die "Basics" der Sprache anschaut und das ein oder andere mal selbst schreibt, nicht desto trotz braucht man Bibliotheken schon recht früh (oder wie willst du z.B. unter C++ eine Bildschirmausgabe machen), dabei ist es aber vollkommen egal ob du nun mit der prozeduralen oder objektorientierten Lehre beginnst.
Und warum bitte schön "verstümmelte" OOP?
Man kann OOP Konzepte schon von Beginn an sauber lernen, ebenso wie prozedurale Programmierung. Einen der ernsthaft C++ lernen will, würde ich z.B. eher auf OOP beginnen lassen, die wesentlichen Grundlagen von den anderen unter C++ bestehenden Sprachparadigmen kann man noch nebenher erklären wenn Zeit ist.Zum Glück kann trotz der Diskussion hier jeder noch für sich selbst entscheiden, was für einem das beste ist. Ich persönlich habe zwar mit prozeduraler Programmierung begonnen, hatte aber dafür eine Umgewöhnungsphase die ich mir hätte sparen können wenn OOP damals schon verbreiteter gewesen wäre. Jemanden anderen habe ich Programmierung auf OOP-Basis erklärt und der kam damit sehr gut klar (zumal er noch kein anderes Sprachparadigma kannte). Ich persönlich finde OOP leichter zu erklären wenn man es anhand von der realen Welt erklärt.
cu André
-
asc schrieb:
...nicht desto trotz braucht man Bibliotheken schon recht früh (oder wie willst du z.B. unter C++ eine Bildschirmausgabe machen)...
videomemory[x+y*LINELENGTH] = '*';
-
asc schrieb:
Die Bibliothek möchte ich mal sehen, die einem alles abnimmt. Es kann sinnvoll sein wenn man sich auch mal die "Basics" der Sprache anschaut und das ein oder andere mal selbst schreibt, nicht desto trotz braucht man Bibliotheken schon recht früh (oder wie willst du z.B. unter C++ eine Bildschirmausgabe machen), dabei ist es aber vollkommen egal ob du nun mit der prozeduralen oder objektorientierten Lehre beginnst.
Du musst die Spuerbibliothek nehmen
Man kann auch alles falsch verstehen wollen.Und warum bitte schön "verstümmelte" OOP?
Man kann OOP Konzepte schon von Beginn an sauber lernen, ebenso wie prozedurale Programmierung. Einen der ernsthaft C++ lernen will, würde ich z.B. eher auf OOP beginnen lassen, die wesentlichen Grundlagen von den anderen unter C++ bestehenden Sprachparadigmen kann man noch nebenher erklären wenn Zeit ist.Zum Glück kann trotz der Diskussion hier jeder noch für sich selbst entscheiden, was für einem das beste ist. Ich persönlich habe zwar mit prozeduraler Programmierung begonnen, hatte aber dafür eine Umgewöhnungsphase die ich mir hätte sparen können wenn OOP damals schon verbreiteter gewesen wäre. Jemanden anderen habe ich Programmierung auf OOP-Basis erklärt und der kam damit sehr gut klar (zumal er noch kein anderes Sprachparadigma kannte). Ich persönlich finde OOP leichter zu erklären wenn man es anhand von der realen Welt erklärt.
Na wenn du meinst, dass man einem der noch nicht mal weiß was ne Variable oder n Array ist, gleich noch zusätzlich Klassen und so Zeug wie public, private usw. erklären muss, dann mach es halt so.
-
Undertaker schrieb:
asc schrieb:
...nicht desto trotz braucht man Bibliotheken schon recht früh (oder wie willst du z.B. unter C++ eine Bildschirmausgabe machen)...
videomemory[x+y*LINELENGTH] = '*';
Na, also man will doch Protected Mode verwenden...

-
555-CARSERVICE schrieb:
Na wenn du meinst, dass man einem der noch nicht mal weiß was ne Variable oder n Array ist, gleich noch zusätzlich Klassen und so Zeug wie public, private usw. erklären muss, dann mach es halt so.
1. Variablen sind etwas das auch in OOP existiert (ebenso wie Arrays, auch wenn man dort meist eher zu Vectoren oder vergleichbaren greift).
2. Das Konzept für Klassen ist Interessanterweise für jemanden der zuvor noch nicht Programmiert hat teilweise recht einfach zu verstehen (ebenso wie public, private), solange man das Konzept nicht zwangsweise technisch rüberbringt.Letzteres habe ich mal extrem stark festgestellt bei einer Auszubildenenbetreuung. Einige wollten es schon hinschmeißen, weil sie nichts verstanden hatten, und ich habe dann versucht eine Basis zu finden, am Schluß habe ich einfach mit den Sachen die auf dem Tisch lagen Programmierung am Beispiel OOP gezeigt, und das kam überraschend gut an (und hat die Grundlage für das technische Verständnis gelegt). Ja, OOP ist nicht 1:1 auf die Welt übertragbar, doch logisch liegt es IMHO näher als die prozedurale Programmierung, da wir Menschen sehr viel abstrahieren.
cu André
-
asc schrieb:
1. Variablen sind etwas das auch in OOP existiert (ebenso wie Arrays, auch wenn man dort meist eher zu Vectoren oder vergleichbaren greift).
2. Das Konzept für Klassen ist Interessanterweise für jemanden der zuvor noch nicht Programmiert hat teilweise recht einfach zu verstehen (ebenso wie public, private), solange man das Konzept nicht zwangsweise technisch rüberbringt.Letzteres habe ich mal extrem stark festgestellt bei einer Auszubildenenbetreuung. Einige wollten es schon hinschmeißen, weil sie nichts verstanden hatten, und ich habe dann versucht eine Basis zu finden, am Schluß habe ich einfach mit den Sachen die auf dem Tisch lagen Programmierung am Beispiel OOP gezeigt, und das kam überraschend gut an (und hat die Grundlage für das technische Verständnis gelegt). Ja, OOP ist nicht 1:1 auf die Welt übertragbar, doch logisch liegt es IMHO näher als die prozedurale Programmierung, da wir Menschen sehr viel abstrahieren.
Und wie programmieren die dann? Um ne Klasse mit Leben zu füllen braucht man doch erst mal Grundwissen. Klar kann man alles auch gleich in Klassen reinstecken, aber dann muss man doch nur mehr lernen. Die Funktionsweise von nem Methoden oder Funktionsaufruf ist doch die selbe, nur das ich bei ner Methode einer Klasse auch noch sowas wie public und private berücksichtigen muss. Die Umsetzung eines (rekursiven) Algorithmus nur dass ich mir bei OOP noch überlegen muss, ob ich die Methoden public oder private mache.
Man sieht hier halt oft Code von Leuten, die irgendwelche Libraries verwenden und noch nicht mal ne Schleife hin bekommen oder irgendwelche wirren Klassenkonstrukte aufbauen ohne irgend nen vernünftigen Algorithmus zur eigentlichen Lösung des Problems im Kopf zu haben.
-
Hi,
nochmal zur eigentlichen Frage:
"wenn man erst mal mit C anfängt und das solange macht, bis man die Grundlagen wirklich versteht"Und genau in dem "bis man die Grundlagen wirklich versteht" liegt der Hase im Pfeffer. Die Grundlagen sind soliedes Handwerk, oop ist dagegen in erster Linie ein Denkmodell was dahinter liegen muß.
Das ist wie beim Häuslebauen. Da kann einer noch so viel von Static und Design und Architektur verstehen, wenn er die Grundlagen des Mauerns nicht beherrscht fällt die ganze Bruchbude ein.
Da wir hier keine Sekte gründen wollen kommt es doch nicht in erster Linie auf die reine Lehre an.
Auch oop bestehrt aus den Grundlagen plus eben noch was dazu. Klassen werden schließlich nicht mit Murmeln gefüllt sondern mit Anweisungen.
Außerdem sind immer noch viele, die sich die ganze Sache im Selbstlauf beibringen.
Selbstverständlich ist es nicht so schwer, jemandem beizubringen was Klassen und Klassenfunktionen sind. Aber das kratzt doch höchstens an der Oberfläche. Die eigentliche oop beruht doch nicht darauf, das ich das was ich füher in einzelnen Dateien gemacht und mit static versteckt habe nun in Klassen zu stecken und mit private zu verstecken.
Die eigentliche oop beginnt doch da, wo ich mir über Abstraktion von Dingen Gedanken mache, über Schnittstellen zur Außenwelt und zu Nachfolgern nachdenke, mir Gedanken darüber mache was Gemeinsamkeiten und Unterschiede sind und was wovon abhängt und abgeleitet werden könnte.
Oder um bei Meyers zu bleiben bei den verschiedenen Katzen, die alle ihre eigenen liebenswerte Art zu schlafen und zu fressen haben. Erkennen, daß ich es hier mit Klassen zu tun habe, aber auch gedanken darüber machen, was nehme ich als "Basiskatze", eine Katze, oder besser ein Säugetier weil ich vielleicht auch Hunde ableiten will...
Da sind die Dinge, die nicht mal so En passant zu lernen sind, vor allem ohne Lehrer und ohne Verständnis der Grundlagen.
Warum soll andererseits alles oop weggelassen werden. Auch Anfänger wollen nicht nur Hello World schreiben sondern auch mal was fürs Auge machen, was motiviert. Spätestens, wenn sie das mit dem C++Builder machen und sich da ein Formular zusammenklicken sind sie voll drin in der oop, auch ohne auch nur eine einzige eigene Quelltextzeile geschrieben zu haben. Dabei lernen sie oop dann gleich am praktischen Beispiel (ein Formular, abgeleitet von TForm) kennen. Und sobald sie eine eigene Komponente von was vorhandenen ableiten ist es nicht nur formelles oop, sondern dann MUSS ich mir Gedanken machen wie es funktionieren soll. Wovon leite ich ab, von TEdit oder TCustomEdit. Was will ich überschreiben, was sichtbar machen. Welche zusätzlichen Dinge brauche ich. Dabei kann man wenn man es ernsthaft macht eine gewaltige Menge über oop lernen.Gruß Mümmel