Stephan Schmid: Begriffschaos im Kopf: Objekt und Instanz

Beitrag lesen

Hallo,

Jetzt gebe ich als viel zitierter Vertreter der Gattung "Programmierer" auch noch meinen Senf dazu.
Schlimmer kann das Begriffschaos auch nicht mehr werden. ;-)

Demnach ist der Begriff Objekt so übeflüssig wie ein Kropf, obwohl sich das ganze ObjektOrientierte Programmierung schimpft?

Nein, da hilft ein Blick in die Entwicklung von OOP. Am Anfang gabs nur Objekte und ihren Instanzen. Man hat sich seine Objekte in eine Programmiersprache selber gebastelt in dem man eine Datenstuktur definiert hat und seine Methoden in Form von Funktionen und Proceduren geschrieben hat.

Durch das Prinzip der Kapselung -Daten und Code als logische Einheit zu sehen- und das Prinzip der Vererbung -hierarchische Strukturen mit inhaltlichen Beziehungen der Objekte untereinander- ist ein solcher Code sehr universel. Ein wildfremder kann dein Objekte verwenden ohne zu wissen was genau dahinter steckt. Er muß nur die Namen der Objekte und Methoden kennen.

Also hat man angefangen den Programmier-Sprachen vorgefertigte  Objektdefinitionen beizulegen das sparte den Programmierern ne Menge arbeit - die Klassen (!!!!) waren geboren.

Als das ganze dann in Mode kam hat man begonnen Betriebssystemen, Anwenderprogrammen und und und... eine objektorientierte Schnittstelle zu verpassen in dem man die vorhandenen mehr oder hierarchischen Strukturen auf ein hierarchisches System von Klassen übertragen hat. So kann man z.B. an HTML "andocken" und es programmieren.

Da aber HTML eigentliche nicht hierachisch ist sind einige Verrenkungen und unlogisch erscheinende Konstruktionen (wie sie in der Syntax von JS aufstossen) notwendig um das hinzukriegen.

Deshalb sind JavaScript-Beispiele auch nicht besonders gut geeignet um das objektorientierte Prinzip zu verstehen.

------------------

Ich laß die Kompliziertheiten mal weg. Kann ich sagen: Einmal gesetzte Eigenschaften und Methoden einer Klasse sind unveränderlich. Damit ich mich nicht aufhänge, müssen die Eigenschaften und Methoden einer Klasse sich auf den kleinsten gemeinsamen Nenner aller darunter zu subsumierendenden Instanzen beschränken.

(streiche Instanzen, setzte Klassen dann stimmt‚s ein Instanz ist nur das Abbild eine Klasse)

Und das mache ich solange, bis alle möglichen Realitäten für meine jeweilen Konkreta gebaut sind?

Genau das ist die ideale Vorgehensweise beim erstellen einer Objekt-Hierarchie. Man beginnt mit möglichst allgemeingültigen Objekt und erzeuge daraus durch vererben und ergänzen immer differenziertere und konkretere Objekte. Ein Baum von Objekt entsteht.

Wenn man eine Objektstruktur auf etwas vorhandes aufgepfropft werden soll geht das leider nicht so schön. Die einzelnen Andockpunkte / Objekte sind ja schon vorgegeben und der Baum dazu muss machmal ganzschön krumm "wachsen".

Wie funktioniert nun das "aufpfropfen": Wir machen aus dem IMG-Tag ein Objekt Image mit den Eigenschaften Breite, Höhe... und Methoden um diese zu verändern. Jetzt haben wir eine Objekt aber noch lange keine objektorientierte Struktur. Für eine objektorientierte Struktur bräuchten wir weitere Objekt die mit Image inhaltlich "verwandt" sind und durch Verallgemeinerung oder Spezialisierung daraus hervorgehen. Tags die in dieser Weise zu IMG passen gibts in HTML aber nicht, braucht ja auch keiner.

Aber eine Image ist immer innerhalb eines Dokumentes. Also könnte man sagen document ist der Vorfahre von Image und Windows der Vorfahre von document (so is es ja auch). Das ist zwar immer noch keine inhaltliche objektorientierte Struktur aber immerhin eine hierachische Struktur und damit ein guter Kompromiss um eine Verbindung zwischen der klassischen HTML-Welt und der objektorientern Welt herzustellen.

So, genug doziert und philosophiert
Gute Nacht
Stephan