$KK(Vererbung Delegation) $KKK(Verschiebung Methoden, Attribute) Ein einfaches Beispiel zur Einführung: $B(Bilder,pullupm.gif,PullUp Field) Diskussion: Was passiert falls es noch eine Unterklasse von Employee gibt, ohne dem Attribut Name ? $KKK(Template Methode) Die Methoden in der Unterklassen haben die gleiche Struktur, sind aber nicht identisch. $B(Bilder,templ1.gif,Template Methode) codeBlock1 und codeBlock3 sind jeweils identisch, codeBlock2 und codeBlock4 sind unterschiedlich. 1. Extrahiere die Methoden in den Unterklassen. Gebe den extrahierten Methoden dieselben Namen. $B(Bilder,templ2.gif,Template Methode) 2. Schiebe die identischen Methoden der Unterklasse, in die Oberklasse. 3. Erzeuge in den Oberklasse für die verschiedenen Blöcke abstrakte Klassen $B(Bilder,templ3.gif,Ergebnis Template Methode) Der eigentliche Algorithmus steht in der Oberklasse. Die Methoden code2() bzw. code4() nennt man hook-up Methoden da sie sich in den Algorithmus einklingen. Die Methode myMethod in der Oberklasse ist eine template-Methode. $R(Literatur) [i|Refactoring>refactoring] Form Template Method [i|Entwurfsmuster>entwurfsmuster] Schablonenmethode (Template Method) $R\ $KKK(Vererbung und Delegation) Probleme mit Vererbung: * Widerspricht der Kapselung: Alle Änderung an der Oberklasse wirkt sich auf die Unterklassen aus. * Klassenbeziehungen sind statisch, d.h sie können nicht zur Laufzeit geändert werden. Hier ein völlig verunglücktes Objektmodell: $B(Bilder,vererb1.gif,Probleme mit paralleler Vererbungshierarchie) Dies ist ein abschreckendes Beispiel von paralleler Vererbungshierarchie. Eine Änderung an LKW muss in 2 verschiedenen Klassen nachvollzogen werden. Mögliche Lösungen: * Mehrfachvererbung: In Smalltalk und Java nicht möglich. Diese Lösung ist auch schlecht wartbar * Ersetze Vererbung durch Delegation $B(Bilder,vererb2.gif,Delegation statt Vererbung) In der obigen Lösung kann im Auto die Gangschaltung ausgetauscht werden. $R(Regel) Die Vererbung ist zwar ein typisches Kennzeichen von OO, man sollte sie aber vorsichtig einsetzen. Bevorzuge kleine Vererbungshierarchien $R\