struppi schrieb:
Mir sind die Aspekte der OOP bekannt.
Deshalb mein Edit zu Beginn des Posts. Mir wurde erst auf halbem Wege klar, worauf du genau hinauswolltest. ;) Ich dachte, ich lasse die Erläuterungen dennoch stehen, weil es viel Getippe war und weil hier vielleicht außer uns doch noch wer mitliest. (Das Folgende geht jetzt auch nicht speziell an dich.)
Anyhoo:
Im Prinzip dient OOP ja auch dazu, Übersicht zu schaffen und sicherzustellen, dass der Programmierer mit größtmöglicher "Disziplin" arbeitet (ob er will oder nicht), und möglichst wenig Interpretationsraum zuzulassen, welche Funktion wie einzusetzen ist.
Man könnte etwa bei Instanzvariablen darauf verzichten,
private und
protected zu verwenden. Dann läge es in der Verantwortung des Programmierers, nur die Werte direkt zu verändern, die dafür vorgesehen sind. Eine etwaige Missachtung würde aber im Fall der Fälle einen wahrscheinlich schwierig zu findenden Fehler herbeiführen, während sich beim Einsatz von private und protected sofort der Compiler/Interpreter beschwert, wenn eine Zugriffsverletzung stattfindet.
Das Aufdecken des Fehlers wird "nach vorne" geschoben. So ist das auch bei abstrakten Methoden. Es ist möglich, bereits bei Instanzierung des Objekts zu prüfen, ob eine Methode existiert, statt erst später festzustellen, dass sie wohl nicht existiert, aber hätte existieren sollen.
Wenn sie für dieses Objekt aus irgendeinem Grund nicht aufgerufen wird, kann das unter Umständen erst drei Versionen später zu einem Fehler führen. Wenn das Objekt instanziert werden kann, ist dagegen sichergestellt, dass alle erwarteten Methoden vorhanden sind.
Diese zusätzlichen Hilfestellungen kosten bei der Ausführung natürlich Zeit, reduzieren aber wahrscheinlich in den meisten Fällen den Entwicklungsaufwand (weniger mögliche Fehlerquellen, Code hat "übersichtlichere Struktur", kürzere Einarbeitungszeit in Teamsituationen).
(Ich würde die draw-Methode in der Elternklasse übrigens in diesem Fall mit leerem Methodenkörper implementieren, wenn es keine abstrakten Methoden gäbe. Sonst hätte ich zwei Minuten später vergessen, dass sie existiert.)
Anwendungen werden immer komplexer, Programmiersprachen ermöglichen deshalb immer mehr Abstraktion (ASM -> C -> C++ -> Java ...). Damit will ich aber nicht sagen, dass das unbedingt immer voll ausgeschöpft werden muss. struppi schrieb glaube ich, dass teilweise OOP-Muster einzig aus dem Grund eingesetzt werden, um OOP-Muster einzusetzen. Kein Widerspruch. :)