$K(Refactoring) $KK(Klassen) $KKK(Ein oder zwei Klassen) $B(Bilder,klassen.gif,Ein oder 2 Klassen?) * Vermeide faule Klassen (besitzt nur Accessor Methode) * Gibt es Methoden (ausser Accessor-Methoden), die sich nur sich auf eine Teilmenge der Instanzvariablen beziehen, lohnt es sich eine neue Klasse zu extrahieren. * Vermeide doppelten Code. Besitzt nicht nur Mitarbeiter, sondern auch andere Klassen ein Telephon, so sollte das Telephon in einer eigener Klasse gespeichert werden (Ausnahme die Klasse ist faul) $R(Literatur) [i|Refactoring>refactoring]. Extract Class, Inline Class $R\ $KKK(Vorteile kleiner Klassen) * leichter zu testen * höhere Wiederverwendbarkeit * Versionierung: niedrigere Wahrscheinlichkeit, daß 2 Programmierer an selben Klasse arbeiten $KKK(Extract Subclass) Was ist bei diesem Design problematisch? $B(Bilder,extrsub.gif,Hier kann Extract Subclass verwendet werden) Lösung Nicht alle Mitarbeiter müssen Urlaub beantragen, oder können Urlaub genehmigen.Wenn einzelne Methoden nur für eine Teilmenge aller Instanzen sinnvoll sind, so deudet dies auf Extract Subclass hin. $B(Bilder,extrsub1.gif,Beispiel von Extract Subclass) $R(Literatur) [i|Refactoring>refactoring] Extract Subclass $R\ $KKK(Rollen Status Pattern) Das obige Objektmodell ist immer noch nicht flexibel genug. Ein Entwickler kann zum leitenden Mitarbeiter befördert werden, d.h plötzlich verändert sich die Verantwortlichkeiten des Mitarbeiters. Das Verhalten einer Klasse ist i.a. konstant (ausser man verwendet fiese Tricks).Ein Objekt kann auch nie (Auch hier gibt es unrühmliche Ausnahmen) seine Klasse ändern. In der realen Wert ändern sich aber das Verhalten von Objekten.Eine Lösung zur Modellierung ist das Status-Pattern. Dies wird immer dann verwendet wenn das Verhalten eines Objekts vom Status abhängig ist. $B(Bilder,statpatt.gif,Status Pattern) Das Status-Pattern lohnt sich nur, falls ein Objekt seinen Status ändert, ansonsten verwende einfache Vererbung. Das Rollenpattern ist eine spezielle Form des Status-Patterns: $B(Bilder,rollen.gif,Rollen Pattern) $R(Literatur) [i|Refactoring>refactoring] Entwurfsmuster [i|Plop Buch>plop] Band 3, Kapitel 9. [e|Rollen>./Dokumente/roles.pdf] PDF-File von Martin Fowler. $R\