Einzelnen Beitrag anzeigen

xJulian

Registriert seit: 21. Aug 2005
14 Beiträge
 
#6

Re: [OOP Grundsatzfragen] Vom Problem zur Klasse exemplarisc

  Alt 30. Nov 2008, 21:43
An einer Stelle habe ich ein Problem mit dem (ansonsten sehr gelungenen und lesenswerten!) Text aus Antwort 1:

Zitat von Der_Unwissende:
Über Vererbung kann man dann beliebig speziell werden (Säugetier -> Meersäuger -> Wal -> Schwertwal -> ... -> Willy). Von links nach rechts kommen nur neue, speziellere Eigenschaften hinzu, wobei keine verloren geht. Willy ist ein konkretes Exemplar, den gibt es dann auch wirklich. Der Rest ist eher abstrakt und man kann halt sagen, dass Willy ein Wal, ein Schwertwal oder eben auch ein Säugetier ist.
An dieser Stelle wird für meinen Geschmack das Subtyping zu sehr mit der Exemplarerzeugung vermengt. Ungeachtet von Vererbung gibt es i.d.R. eine scharfe (gedankliche und technische) Trennung zwischen Klassen und Exemplaren von Klassen. Um im Anschaulichen zu bleiben: Ich kann eine Klasse Automobil/Säugetier haben und ich kann davon eine (evtl. über mehrere "Ecken" abgeleitete) Unterklasse Opel Vectra B/Schwertwal haben. Die Gemeinsamkeit dieser Klassen ist dann, dass sie jeweils Baupläne beschreiben und ich Exemplare davon erzeugen kann -> Klassen sind immer abstrakt (und Exemplarerzeugung ist von Vererbung scharf zu trennen - zumindest in gängiger OOP, dies mag in einzelnen Programmiersprachen anders sein).

Wenn ich mir jetzt aber genau den Opel Vectra B ansehe, der beim Nachbarn vor dem Haus steht, oder eben meinen Schwertwal-Freund Willy, dann habe ich jeweils ein Exemplar einer Klasse. Obwohl der Vectra auch polymorph der Klasse Automobil zugeordnet werden kann, gibt es doch immer genau eine Klasse, von der er tatsächlich und direkt ein Exemplar ist (in Java abprüfbar mit dem speziellen Schlüsselwort "instanceof" - mein Delphi ist leider recht eingerostet...). Falls das jetzt konstruiert erscheint, so liegt das daran, dass genau an dieser Stelle die Analogie zur Realität versagt. In der Realität könnte ich meine Klassifizierung stets noch verfeinern (Opel Vectra B produziert 1999 in Herstellungswerk XY, männliche Schwertwale mit Freundschaftsbedürfnis), in der OOP ist das nicht so - es gibt nur die Klassen, die man modelliert. Wenn ich sage, beim Opel Vectra B ist Schluss mit der Hierarchie, dann ist dort Schluss.

Zurück zu den Exemplaren: Im Gegensatz zu Klassen, die abstrakte Baupläne beschreiben (nicht zu verwechseln mit "abstrakten Klassen" - einem Begriff, der unglücklicherweise mit anderweitiger Semantik belegt ist), ist ein Exemplar immer konkret. Von jeder Klasse kann ich beliebig viele Exemplare erzeugen. Ein Exemplar ist einer Klasse zugehörig, und hat darüber hinaus eine (abprüfbare) Identität, die es auf diese Weise zu einem identifizierbaren, konkreten Objekt macht.

Ich hoffe der Unterschied ist verständlich dargestellt. Ich bitte darum, mir nachzusehen, dass ich das Exemplar am Ende der Klassenhierarchie so nicht stehen lassen konnte.
Julian Fietkau
  Mit Zitat antworten Zitat