Hallo,
dein Pseudocode ist aber auch nicht gerade ein typisches Beispiel für Objektorientierung - ich wüsste auch nicht, wie man das besser verdeutlichen könnte. Außerdem hast du vergessen, den Mäher abzustellen. Das kann beim Putzen gefährlich sein! ;-)
Oh, das kommt davon wenn man eine Schritt für Schritt-Anleitung umsetzt ohne sich dabei selbst Gedanken zu machen *peinlich*. Aber ich hab ja den Inhalt der Klasse Rasenmäher nicht näher gezeigt. Die Methode putzen(Rasenmäher mäher) prüft nämlich zuerst ob der Rasenmäher an ist und wirft in diesem Fall eine DangerToLifeException.
Was wäre in deinen Augen denn ein typisches Beispiel für Objektorientierung? Ich habe die Garage, den Rasenmäher und das Grundstück als Klassen modelliert. Was hättest du getan?
Findest du? Ich nicht. Wenn ich in der Küche anfange zu kochen oder zu backen, suche ich mir ja auch erst alle Utensilien und Zutaten zusammen, bevor ich überhaupt anfange - und nicht "just in time" wenn ich sie brauche.
Angenommen ich koche ein 6-Gänge-Menü in einer 8qm-Küche mit wenig Ablagefläche, dann kann ich es nicht gebrauchen wenn alles voll ist und ich keinen Platz zum Arbeiten habe, weil die Sachen für den 6. Gang auch schon draußen rumliegen. Nein, ich würde wirklich die Sachen erst dann aus der Schublade bzw. aus dem Kühlschrank holen wenn ich sie brauche. Dadurch kann ich mich jederzeit auf den wesentlichen Arbeitsschritt konzentrieren und werde nicht von all den andern Zutaten abgelenkt. Dadurch ist es auch weniger wahrscheinlich, dass ich versehentlich die falschen Zutaten zusammenmische.
Das mag sein, klingt sogar überzeugend. Aber genau diese Denkweise behagt mir nicht, weil sie vom Programmierer verlangt, in weiten Bereichen die Kontrolle abzugeben. Besonders ausgeprägt ist das im Bereich der Speicherverwaltung.
Das tolle an C++ ist, dass es dir erlaubt die volle Kontrolle zu behalten. Wenn du die Abstraktionsmechanismen nicht nutzen willst, dann musst du das ja nicht tun. Ich empfehle einem Anfänger, der von PHP kommt, aber lieber die Abstraktionen zu nutzen und erst später, wenn er sicher im Umgang mit der Sprache ist, sich auf die "Low-Level"-Ebene zu begeben.
Weiß ich nicht, ich kann da nur für mich sprechen. Und ich will ein System (Werkzeug, Software, Hifi-Anlage, Auto) erstmal bis ins kleinste Detail kennen, bevor ich es wirklich einsetze.
Das will ich auch. Aber ich nehme auch die Abstraktionsmöglichkeiten, die mir eine Programmiersprache bietet, dankbar an. Zurzeit arbeite ich an einem Programm mit weit über 100000 Zeilen Code und ich bin wirklich froh, dass mir die Java Virtual Machine dabei die Speicherverwaltung abnimmt. Viele Stellen sind so schon kompliziert genug und es ist auch dementsprechend schwer den Überblick zu bewahren.
Eine solche Diskussion könnte ich auch nur sehr einseitig führen. Ich habe nie behauptet, dass ich C++ mit all seinen Möglichkeiten aus dem FF (oder dezimal 255) beherrsche. Und ich habe mich auch tatsächlich noch nicht so intensiv damit beschäftigt, dass mir all diese Features wirklich vertraut sind. Aber zumindest so weit, dass ich erkannt habe: Ich könnte es anwenden, wenn's denn unbedingt sein muss, aber es liegt mir nicht. Manche Programmierer empfinden es vielleicht als Pluspunkt, wenn ihnen gewisse Denkarbeiten und Routineschritte abgenommen werden; ich will das nicht. Ich will noch jedem Bit bei der Arbeit zusehen können, und dafür ist "echtes" C++ zu undurchsichtig. Da läuft für meinen Geschmack zuviel automatisch hinter den Kulissen ab, was ich als Programmierer nicht mehr im einzelnen mitbekomme und auch nicht beeinflussen kann.
Na dann sind Assembler und C ja genau das richtige für dich.
Gruss,
OhneName