07.03.2014 Aufrufe

Umgang mit Generalisierung

Umgang mit Generalisierung

Umgang mit Generalisierung

MEHR ANZEIGEN
WENIGER ANZEIGEN

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.’

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!