Vererbung
Alles was wir bisher taten ist bekannt als "composition". Dieser Name bezeichnet das Zusammenstellen eines Objektes aus mehreren kleineren Komponenten. Wahrscheinlich benutzen Sie bereits compositions in Ihren Programmen, aber lassen Sie uns es exakt definieren. Oft wird es auch als "has-a" bzw. "hat-ein" Relation bezeichnet wie schon früher in diesem Kapitel ausführlich beschrieben wurde. Objekt A hat-ein Objekt B. Ein Haus hat eine Küche, ein Hund einen Schwanz, etc. Wie steht es nun um Objekte die kein "hat-ein" besitzen? - Nun, im Endeffekt besteht alles aus irgendetwas. Oder? Irgendwelche Ideen? Zum Beispiel, in welchem Zusammenhang steht ein Gerät mit einem Kühlschrank? Wie gehören Affengehege und Gehege zusammen? Was verbindet James Dean und Ronald Reagan? zu Elvis? zu Che Guverra? Sie sehen schon, wenn Sie einmal damit beginnen Ihre Ideen und Konzepte zu organisieren, dann reichen hat-ein Relationen mit Sicherheit nicht aus. Das fehlende Teil um die Aufragbe zu erledigen ist der "ist ein" bzw. "is-a" Zusammenhang.
Bevor wir weitermachen, lassen Sie uns kurz zwei Ideen genauer betrachten. Eine hat-ein Relation ist gegeben wenn ein Objekt ein anderes enthält. Ein Auto hat einen Motor. Ein Motor hat einen Vergaser. Ein Vergaser hat ... Eine ist-ein Relation ergibt sich wenn ein Ding den selben Typ hat wie ein anderes Ding. Ein Auto z.B. ist ein Fahrzeug. Ein Fahrzeug ist eine Maschine. Eine Maschine ist ein von Menschen erstelltes Werk. Wir sollten jetzt wirklich damit aufhören. Hehe, wahrscheinlich denken Sie erst garnicht daran, also weiter ins Detail:
Vererbung ist nicht kompliziert, jedoch schwer zu visualisieren. Es gibt in der "echten" Welt nichts, was genau das selbe Verhalten aufweist. Das kommt daher dass Vererbung mehr ein menthales Kategorisierungssystem ist. Es ist leicht, jemanden als Säugetier zu verspotten, aber es gibt kein Säugetier in dem Sinne, eben nur Arten von Säugetieren. Das heisst natürlich nicht, dass das Wort Säugetier selbst nutzlos ist, nur - erwarten Sie nicht in einem Zoo das "Säugetier" anzutreffen. Wir haben früher in diesem Kapitel über Kartons und Container gesprochen. - Das funktioniert wunderbar zur "composition" von Objekten, bei der Vererbung wird es jedoch etwas schwierig. Wir sollten zur Visualisierung von Vererbung ein leicht anderes Modell finden.
Wir sind eine Spur zu schnell. Lassen Sie uns sichergehen, dass uns der Unterschied zwischen einer hat-ein und der ist-ein Relation klar ist. Gehen Sie die Liste unten kurz durch und entscheiden Sie zwischen Vererbung oder Composition. Versuchen Sie herauszufinden, was alle Vererbungsbeispiele gemeinsam haben sowie die Gemeinsamkeiten der Compositionsbeispiele:
1 Tier,
Säugetier, Hund, Pudel
2 Computer, Motherboard, CPU, Schaltkreise
3 Entertainer, Sänger, Pop-Star, Elvis
4 Haus, Küche, Spüle, Verschluss
5 Buchladen, Computerabteilung, Flashabteilung, Actionscriptabteilung
6 Buch, Computerbuch, Flashbuch, Actionscriptbuch
7 Buch, Kapitel, Paragraph, Satz, Wort
8 Kontinent, Land, Region, Stadt, Straße, Haus
9 Asien, China, Fujian, Xiamen, ZengCuoAn, 15
10 http://www.macromedia.com/support/flash/
11 Applikation, Dokument, Scrollbar, Thumbs
12 Fenster, Dialog, Allgemeiner Dialog, Druckdialog
13 Essen, Dessert, Kuchen, Bananencreme
14 01 (204) 435-8301
Lassen Sie es uns kurz im Detail durchgehen:
1 Tier, Säugetier, Hund, Pudel - Vererbung. Ein Pudel ist ein Hund, ein Hund ein Säugetier, ein Säugetier ist ein Tier. Welche Eigenschaften haben die einzelnen Tiere? - Versuchen Sie ihnen folgende Eigenschaften zuzuweisen: Haare, Augen, Verhasstheit, domestiziert.
2 Computer, Mainboard, CPU, Schaltkreise - eine Komposition. Ein Computer hat ein Mainboard, ein Mainboard eine CPU, ... Wenn ein Computer einen Ein/Aus Schalter besitzt, hat dann eine CPU auch einen solchen Schalter? (Sagen Sie jetzt bitte nicht, ja 5 Billionen Transistoren! ;-) ). Stellen Sie sich eine Ähnliche Frage zum Beispiel mit den Tieren und Hunden.
3 Entertainer, Sänger, Pop-Star, Elvis - Vererbung. Elvis war ein Pop-Star, ein Pop-star ist ein Sänger, ein Sänger ist ein Entertainer. Sind alle Popstars auch Sänger? Wo würden Sie Schauspieler in dieser Liste einordnen? Erkennen Sie, dass Elvis eine Instanz war, und der Rest Klassen sind?
4 Haus, Küche, Spüle, Verschluss - Composition. Eine Küche hat eine Spüle. Eine Spüle hat mit Sicherheit kein Haus. Natürlich könnten Sie eine Küche aus einem Haus entfernen und in einen Raum einbauen, dann wäre es immer noch eine Küche. - Ein Objekt im Objekt.
5 Buchladen, Computerabteilung, Flashabteilung, Actionscriptabteilung - Composition. Hat ein, hat ein, hat ein, ... Jeder Teil ist physisch innerhalb eines anderen Teils. Man könnte Objekte tauschen, z.B. die Actionscriptabteilung in die Küche legen, und die Küche befindet sich nun auf dem Mond. - Ein großer Vorteil von korrekt designten Objekten ist, dass Sie sie an verschiedenen Orten wiederverwenden können!
6 Buch, Computerbuch, Flashbuch, Actionscript Buch - Vererbung. All diese sind Typen und Untertypen. Ein Actionscriptbuch ist ein Computerbuch. Gibt es irgendwelche Instanzen in dieser Aufzählung? Was wäre ein Beispiel für eine Instanz wenn Sie am Ende der Liste eine anfügen würden?
7 Buch, Kapitel, Paragraph, Satz, Wort - Composition. Vielleicht eine trickreiche, da die Komponenten nicht unbedingt phsyikalisch sein müssen. Natürlich können Sie einen Paragraphen anfassen in jedem beliebigen Buch, aber es ist immer noch eine Composition wenn wir generell über Bücher sprechen. Bücher haben Kapitel, Sätze haben Wörter usw. Dasselbe gilt auch für das vorige Beispiel, wenn es auch hier klarer Ersichtlich ist. Küchen haben Spülen, und meine Küche hat auch eine Spüle. In beiden Fällen ist die Spüle eine Komponente der Küche. Verlieren Sie nicht den Fokus!
8 Kontinent, Land, Region, Stadt, Straße, Haus - Composition. Diesesmal ist sie abstrakt, aber dennoch eine Composition. Natürlich ist eine Strasse kein Typ von Land. Aber klarerweise können Konzepte Teile anderer Konzepte sein. - Der Container ist der Kontinent, welcher Länder in sich hat. Diese Länder enthalten Regionen ...
9 Asien,
China, Fujian, Xiamen, ZengCuoAn, 15 - Composition. Diesselbe Hierarchie wie
beim letzten Beispiel, nur mit Instanzen. Jedes Konzept wurde nun mit einem
Objekt befüllt. Der Kontinent namens Asien hat-ein Land namens China. Das
Land China hat eine Stadt namens Xiamen.
10 http://www.macromedia.com/support/flash/ - Composition. Die Domäne macromedia.com hat-eine Sektion namens Support. Support hat eine Sektion namens Flash. Diese Sektion ist sinnvoll wenn alles andere schiefgeht, da sie eine Kopie des Handbuchs enthält. Ist die Ordnerstruktur auf Ihrem Computer eine Composition oder Vererbung? Sind alle Baumstrukturen Compositionen? (nein, sehen sie nach ...)
11 Applikation, Dokument, Scrollbar, Thumbnail. - Composition. Ja, Windowsprogramme sind objektorientiert. Dokumente haben Scrollbalken, Scrollbalken haben Thumbs (die kleinen Kästchen in einem Scrollbalken die Sie draggen können).
12 Fenster, Dialog, Allgemeiner Dialog, Druckdialog. - Vererbung. Ja, Windowsprogramme nutzen auch Vererbung. Der Druckdialog ist ein Fenstertyp, so wie alle Dialoge.
13 Essen, Dessert, Kuchen, Bananencreme. - Vererbung. Kuchen ist Essen. Dessert ist Essen. Merken Sie - es ist eine Baumstruktur. - Sie können viele Arten von Desserts haben, auch von Kuchen. All diese Strukturen sind Bäume.
14 01 (204) 435-8301 - Composition. Dies ist dasselbe wie wenn man sagt "Nordamerika->Manitoba->Miami->meine alte Telefonnummer". Das Telefonsystem benutzt stark strukturierte Namensgebung (in Form von Ziffern) um Sie zu finden, wie das Postsystem.
Vererbung und OO Programmierung generell wird am sinnvollsten wenn Sie genügend ähnliche Klassen haben, damit sie sich natürlicherweise selbst zu organisieren beginnen (immer gut, Hoffnung zu haben!). Dies ist wichtig festzuhalten, da viele Flash Programme sehr simpel und relativ klein sind, sowie kurze Lebenszeiten haben. Es wäre übertrieben mehrere Vererbungsebenen zu verwenden, nur um einen Button auf einer Seite zu verlinken. Kleine Programme zu schreiben ist ungefähr so als wäre man der Postler eines kleinen Ortes. Sie brauchen nicht mehr als den Namen einer Person und wissen wohin die Post zu liefern ist. Gibt es irgendeine Änderung - jemand zieht in den Ort, jemand zieht in ein neues Haus, selbst wenn ein Straßenname sich ändert - Sie können alle Änderungen im Kopf nachvollziehen. Wahrscheinlich lachen Sie sogar darüber, wie ernst Postler in größeren Städten obskure Regeln nehmen, oder wie sie über kleine Änderungen im Postsystem debattieren. Im Endeffekt liefern Sie jedoch alle die Post aus. Solange sie verstehen, dass das System des kleinen Ortes nicht in einer größeren Stadt funktionieren kann, gibt es keine Probleme. - Oft reicht der "schnelle, schmutzige Weg" leicht aus, um den Anforderungen zu genügen. - Wahrscheinlich ist es sogar empfehlenswert. Sie wollen garnicht Hunde, Säugetiere bis in einzelne Atome zerlegen. Eines der Hauptskills in der OO Programmierung ist es, die richtige Balance zwischen Komplexität und Vollständigkeit zu finden. (Genau dasselbe Problem hat ein Author beim Schreiben eines kurzen Kapitels über Objekt-orientierte Programmierung mit Actionscript!)