20 Jahre Erfahrung FreeCall 0800 tutegos

Methoden zusammenstellen (Composing Methods)

Verschiebe Methode (Move Method)

Eine Methode wird von einer anderen Klasse mehr verwendet als von der definierenden Klasse.

Erzeuge eine Methode mit ähnlichem Rumpf in der Klasse, die die Eigenschaft am meisten nutzt. Delegiere in der alten Methode an die neue Implementierung, oder lösche sie.

[UML]

Für mehr Hinweise siehe Seite 142 in Refactoring

Zusätzliche Kommentare

Marian Vittek gibt ein Beispiel für das Verschieben einer Methode; im Argument wird der alte Typ übergeben.

class Project {
  Person[] participants;
}

class Person {
  int id;
  boolean participate(Project p) {
    for(int i=0; i<p.participants.length; i++) {
	  if (p.participants[i].id == id) return(true);
    }
    return(false);
  }   
}

... if (x.participate(p)) ...

Nach der Verschiebung folgt:

class Project {
  Person[] participants;
  boolean participate(Person x) {
    for(int i=0; i<participants.length; i++) {
	  if (participants[i].id == x.id) return(true);
    }
    return(false);
  }   
}

class Person {
  int id;
}

... if (p.participate(x)) ...

Verschiebe Attribut (Move Field)

Eine andere Klasse nutzt ein Attribut mehr als die eigene Klasse, die das Attribut definiert.

Erzeuge ein neues Attribut in der Ziel-Klasse und ändere die Nutzer.

[UML]

Für weitere Informationen siehe Seite 146 in Refactoring.

Extrahiere Klasse (Extract Class)

Eine Klasse macht Arbeit, die zwei Klassen tun sollten.

Erzeuge eine neue Klasse. Bewege die relevanten Attribute und Methoden von der alten Klasse in die neue.

[UML]

Für mehr Informationen siehe Seite 149 von Refactoring.

Setze Klasse inline (Inline Class)

Eine Klasse macht nicht viel.

Verschiebe alle Eigenschaften in eine andere Klasse und lösche sie.

[UML]

Für mehr Informationen siehe Seite 154 von Refactoring.

Verstecke den Delegate

Der Client ruft die Delegator-Klasse eines Objekts auf.

Schreibe Methoden auf dem Server um den Delegator zu verstecken

[UML]

Mehr Informationen auf Seite 157 in Refactoring.

Entferne Klasse in der Mitte (Remove Middle Man)

Eine Klasse macht zu viele einfache Delegationen.

Der Klient soll selbst die Methoden des Delegates aufrufen.

[UML]

Für weitere Informationen siehe Seite 160 in Refactoring.

Führe fremde Methode ein (Introduce Foreign Method)

Eine nicht änderbare Klasse benötigt eine zusätzliche Methode.

Erzeuge die Methode beim Klienten mit einem Verweis auf die Klasse als erstes Argument.

Date newStart = new Date( previousEnd.getYear(), previousEnd.getMonth(), previousEnd.getDate() + 1 );
[ARROW]
Date newStart = nextDay(previousEnd);

private static Date nextDay(Date arg) {
	return new Date (arg.getYear(),arg.getMonth(), arg.getDate() + 1);
}

Mehr Informationen unter Seite 162 bei Refactoring.

Führe lokale Erweiterung ein

Eine verwendete Serverklasse benötigt mehrere zusätzliche Methoden, aber die Klasse kann nicht modifiziert werden.

Erstelle eine neue Klasse, welche die benötigten zusätzlichen Methoden besitzt. Mache die neu geschriebene Klasse (Erweiterung) zu einer Unterklasse oder einem Wrapper von dem Original.

[UML]

Mehr Informationen auf Seite 164 in Refactoring.