Umgang mit Generalisierung
Umgang mit Generalisierung
Umgang mit Generalisierung
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Marion Behrens und Aylin Aksac<br />
December 20, 2007
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Inhaltsverzeichnis<br />
Einführung<br />
Verschiebung<br />
nach oben<br />
nach unten<br />
Extraktion und Abflachung<br />
Extraktion der Unterklassen<br />
Extraktion der Oberklassen<br />
Extraktion der Schnittstelle<br />
Abflachen der Hierarchie<br />
Template method pattern<br />
Template- Methode bilden<br />
Delegation vs. Vererbung<br />
Vererbung zu Delegation<br />
Delegation zu Vererbung<br />
Fazit
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Einführung<br />
Einführung<br />
◮ Vererbung ist ein effektives Mittel, Redundanzen zu<br />
vermeiden.<br />
◮ ’Bei einer ist- ein Beziehung muss Vererbung verwendet<br />
werden!
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Einführung<br />
Einführung<br />
◮ Vererbung ist ein effektives Mittel, Redundanzen zu<br />
vermeiden.<br />
◮ ’Bei einer ist- ein Beziehung muss Vererbung verwendet<br />
werden!<br />
◮ Vererbung ist eine sehr häufig anzutreffende, ABER nicht<br />
immer gerechtfertigte Beziehung.
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Einführung<br />
Einführung<br />
◮ Vererbung ist ein effektives Mittel, Redundanzen zu<br />
vermeiden.<br />
◮ ’Bei einer ist- ein Beziehung muss Vererbung verwendet<br />
werden!<br />
◮ Vererbung ist eine sehr häufig anzutreffende, ABER nicht<br />
immer gerechtfertigte Beziehung.<br />
◮ Veränderungen / Erweiterungen im Programmcode haben in<br />
Vererbungsstrukturen weitreichende Auswirkungen.
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Einführung<br />
Einführung<br />
◮ Vererbung ist ein effektives Mittel, Redundanzen zu<br />
vermeiden.<br />
◮ ’Bei einer ist- ein Beziehung muss Vererbung verwendet<br />
werden!<br />
◮ Vererbung ist eine sehr häufig anzutreffende, ABER nicht<br />
immer gerechtfertigte Beziehung.<br />
◮ Veränderungen / Erweiterungen im Programmcode haben in<br />
Vererbungsstrukturen weitreichende Auswirkungen.
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Verschiebung<br />
nach oben<br />
Pull Up<br />
◮ Attribut nach oben verschieben<br />
◮ Methode nach oben verschieben
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Verschiebung<br />
nach oben<br />
Pull Up<br />
◮ Attribut nach oben verschieben<br />
◮ Methode nach oben verschieben<br />
◮ Konstruktorrumpf nach oben verschieben
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Verschiebung<br />
nach oben<br />
Pull Up<br />
◮ Attribut nach oben verschieben<br />
◮ Methode nach oben verschieben<br />
◮ Konstruktorrumpf nach oben verschieben
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Verschiebung<br />
nach oben<br />
Pull Up
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Verschiebung<br />
nach oben<br />
Pull Up
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Verschiebung<br />
nach oben<br />
Pull Up
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Verschiebung<br />
nach unten<br />
Push Down<br />
◮ Attribut nach unten verschieben<br />
◮ Methode nach oben verschieben
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Verschiebung<br />
nach unten<br />
Push Down<br />
◮ Attribut nach unten verschieben<br />
◮ Methode nach oben verschieben
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Extraktion und Abflachung<br />
Extraktion der Unterklassen<br />
Extraktion der Unterklassen<br />
Problem<br />
Einige Istanzen verwenden nur einen Teil des Verhaltens einer<br />
Klasse.<br />
Lösung<br />
Spezielles Verhalten in Unterklasse extrahieren.
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Extraktion und Abflachung<br />
Extraktion der Unterklassen<br />
Extraktion der Unterklassen<br />
Problem<br />
Einige Istanzen verwenden nur einen Teil des Verhaltens einer<br />
Klasse.<br />
Lösung<br />
Spezielles Verhalten in Unterklasse extrahieren.
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Extraktion und Abflachung<br />
Extraktion der Unterklassen<br />
Extraktion der Unterklassen
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Extraktion und Abflachung<br />
Extraktion der Oberklassen<br />
Extraktion der Oberklassen<br />
Problem<br />
Klassen wurden <strong>mit</strong> ähnlichem Verhalten implementiert.<br />
Lösung<br />
Redundantes Verhalten in Oberklasse extrahieren.
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Extraktion und Abflachung<br />
Extraktion der Oberklassen<br />
Extraktion der Oberklassen<br />
Problem<br />
Klassen wurden <strong>mit</strong> ähnlichem Verhalten implementiert.<br />
Lösung<br />
Redundantes Verhalten in Oberklasse extrahieren.
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Extraktion und Abflachung<br />
Extraktion der Oberklassen<br />
Extraktion der Oberklassen
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Extraktion und Abflachung<br />
Extraktion der Schnittstelle<br />
Extraktion der Schnittstelle<br />
Problem<br />
◮ Eine Klasse spielt in verschiedenen Situationen<br />
unterschiedliche Rollen.<br />
◮ Eine Klasse muss bestimmte Methodenaufrufe auf<br />
verschiedenen anderen Klassen ausfhren.<br />
Lösung<br />
◮ (Mehrfachvererbung)<br />
◮ Gemeinsame Spezifikation (Methodenaufrufe) in Schnittstelle<br />
extrahieren.
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Extraktion und Abflachung<br />
Extraktion der Schnittstelle<br />
Extraktion der Schnittstelle<br />
Problem<br />
◮ Eine Klasse spielt in verschiedenen Situationen<br />
unterschiedliche Rollen.<br />
◮ Eine Klasse muss bestimmte Methodenaufrufe auf<br />
verschiedenen anderen Klassen ausfhren.<br />
Lösung<br />
◮ (Mehrfachvererbung)<br />
◮ Gemeinsame Spezifikation (Methodenaufrufe) in Schnittstelle<br />
extrahieren.
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Extraktion und Abflachung<br />
Extraktion der Schnittstelle<br />
Extraktion der Schnittstelle
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Extraktion und Abflachung<br />
Abflachen der Hierarchie<br />
Abflachen der Hierarchie<br />
Problem<br />
Ober- oder Unterklassen bringen keinen zusätzlichen Nutzen.<br />
Lösung<br />
Ober- und Unterklassen zusammenführen.
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Extraktion und Abflachung<br />
Abflachen der Hierarchie<br />
Abflachen der Hierarchie<br />
Problem<br />
Ober- oder Unterklassen bringen keinen zusätzlichen Nutzen.<br />
Lösung<br />
Ober- und Unterklassen zusammenführen.
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Extraktion und Abflachung<br />
Abflachen der Hierarchie<br />
Abflachen der Hierarchie
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Template method pattern<br />
Template- Methode bilden<br />
Template- Methode bilden<br />
Problem<br />
Methoden haben ähnliche aber nicht identisch implementierte<br />
Schritte, die in gleicher Reihenfolge durchgeführt werden.<br />
Lösung<br />
Gemeinsame Folge der Schritte in Oberklasse verschieben.
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Template method pattern<br />
Template- Methode bilden<br />
Template- Methode bilden<br />
Problem<br />
Methoden haben ähnliche aber nicht identisch implementierte<br />
Schritte, die in gleicher Reihenfolge durchgeführt werden.<br />
Lösung<br />
Gemeinsame Folge der Schritte in Oberklasse verschieben.<br />
Hinweis<br />
Unterschiedliche Prozesse werden durch Polymorphismus in den<br />
einzelnen Unterklassen durchgeführt.
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Template method pattern<br />
Template- Methode bilden<br />
Template- Methode bilden<br />
Problem<br />
Methoden haben ähnliche aber nicht identisch implementierte<br />
Schritte, die in gleicher Reihenfolge durchgeführt werden.<br />
Lösung<br />
Gemeinsame Folge der Schritte in Oberklasse verschieben.<br />
Hinweis<br />
Unterschiedliche Prozesse werden durch Polymorphismus in den<br />
einzelnen Unterklassen durchgeführt.
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Template method pattern<br />
Template- Methode bilden<br />
Template- Methode bilden
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Delegation vs. Vererbung<br />
Vererbung zu Delegation<br />
Vererbung zu Delegation<br />
Problem<br />
Unterklasse enthält eine Menge an Daten der Oberklasse, die für<br />
sie nicht sinnvoll sind.<br />
Lösung<br />
Partielle Nutzung und vollständige Kontrolle von Daten durch<br />
Delegation
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Delegation vs. Vererbung<br />
Vererbung zu Delegation<br />
Vererbung zu Delegation<br />
Problem<br />
Unterklasse enthält eine Menge an Daten der Oberklasse, die für<br />
sie nicht sinnvoll sind.<br />
Lösung<br />
Partielle Nutzung und vollständige Kontrolle von Daten durch<br />
Delegation<br />
Pro und Kontra<br />
Pro: Möglichkeit zu entscheiden welche Teile der delegierten<br />
Klasse man nutzt und welche nicht. Kontra: Es müssen zusätzlich<br />
delegierte Methoden implementiert werden.
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Delegation vs. Vererbung<br />
Vererbung zu Delegation<br />
Vererbung zu Delegation<br />
Problem<br />
Unterklasse enthält eine Menge an Daten der Oberklasse, die für<br />
sie nicht sinnvoll sind.<br />
Lösung<br />
Partielle Nutzung und vollständige Kontrolle von Daten durch<br />
Delegation<br />
Pro und Kontra<br />
Pro: Möglichkeit zu entscheiden welche Teile der delegierten<br />
Klasse man nutzt und welche nicht. Kontra: Es müssen zusätzlich<br />
delegierte Methoden implementiert werden.
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Delegation vs. Vererbung<br />
Vererbung zu Delegation<br />
Vererbung zu Delegation
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Delegation vs. Vererbung<br />
Delegation zu Vererbung<br />
Delegation zu Vererbung<br />
Problem<br />
Viele oder alle Methoden der delegierten Klasse werden verwendet.<br />
Lösung<br />
Delegation durch Vererbung ersetzen.
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Delegation vs. Vererbung<br />
Delegation zu Vererbung<br />
Delegation zu Vererbung<br />
Problem<br />
Viele oder alle Methoden der delegierten Klasse werden verwendet.<br />
Lösung<br />
Delegation durch Vererbung ersetzen.<br />
Hinweis<br />
Werden mehrere Delegationen in einer Klasse verwendet, kann man<br />
sie nicht in eine Vererbungsstruktur transformieren.
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Delegation vs. Vererbung<br />
Delegation zu Vererbung<br />
Delegation zu Vererbung<br />
Problem<br />
Viele oder alle Methoden der delegierten Klasse werden verwendet.<br />
Lösung<br />
Delegation durch Vererbung ersetzen.<br />
Hinweis<br />
Werden mehrere Delegationen in einer Klasse verwendet, kann man<br />
sie nicht in eine Vererbungsstruktur transformieren.
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Delegation vs. Vererbung<br />
Delegation zu Vererbung<br />
Delegation zu Vererbung
<strong>Umgang</strong> <strong>mit</strong> <strong>Generalisierung</strong><br />
Fazit<br />
Fazit<br />
Zitat:<br />
’Manchmal ist das Leben halt anders.’