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 andre 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 zweit Klassen tun sollten.

Erzeuge eine neu 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.

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.