11. 6.1 Extract Method Mechanics Create a new method, name it according to its purpose Copy code to new method Check local variables Check temporary variables Local variables modified by target code block? Pass in local variables needed by new method as parameters Compile new method Replace code block with new method Compile and test Internal Use Only 4/22/2011 4
12. 6.2 Inline Method 在函式呼叫點插入函式本體,然後移除該函式。 Motivation Remove redundant redirection Mechanics Make sure the method is not polymorphic Find all of its callers Replace all calls to it with its code Compile and test Delete the method definition Internal Use Only 4/22/2011 5
13. 6.3 Inline Temp 將所有對只被附值一次暫時變數的引用動作,替換為對它賦值的那個運算式本身。 Motivation Remove temporary variables that block refactoring Mechanics If the temporary variable is not final, declare it as final and compile Replace all references to it with its initialization Compile and test after each replacement Delete the variable declaration and initialization Compile and test Internal Use Only 4/22/2011 6
14. 6.4 Replace Temp with Query 將對暫時變數附值的運算式提煉到一個獨立函式中。將這個暫時變數的所有「被引用點」替換為「對新函式的呼叫」。新函式可被其他函式使用。 Motivation Make the query available to the class Mechanics Find a temporary variable that has been assign once only Declare it as final and compile Move the initialization code to a new method Compile and test Do Inline Temp on the temporary variable Internal Use Only 4/22/2011 7
15. 6.5 Introduce Explaining Variable 將該複雜運算式〈或其中一部分〉的結果放進一個暫時變數,以此變數名稱來解釋運算式用途。 Motivation Use a temporary variable to help explain the purpose of an operation Mechanics Declare a final temporary variable to store the result of an operation Replace the operation with a reference to the temporary variable Compile and test Repeat on other operations Internal Use Only 4/22/2011 8
16. 6.6 Split Temporary Variable 針對每次賦值,創造一個獨立的、對應的暫時變數。 Motivation Avoid using a temporary variable for multiple purposes Mechanics Rename the temporary variable at its declaration and initialization Declare new temporary variable as final Replace references to the temporary variable before its second assignment with the new one Re-declare the temporary variable at its second assignment Compile and test Repeat on other temporary variables Internal Use Only 4/22/2011 9
17. 6.7 Remove Assignments to Parameters 以一個暫時變數取代一個參數的位置。 Motivation Avoid assigning new values to parameters (passed by value) Mechanics Create a temporary variable to store the new value for the parameter Replace all references to the parameter after the assignment with reference to the temporary variable Edit the assignment statement to assign to the temporary variable Compile and test Internal Use Only 4/22/2011 10
18. 6.8 Replace Method with Method Object 將大型函式放進一個獨立物件中,如此一來區域變數就成了物件內的欄位。然後你可以在同一個物件中將這個大型函式分解為數個小型函式。 Motivation Overcome the difficulty of handling local variables during method breakdown Internal Use Only 4/22/2011 11
19. 6.8 Replace Method with Method Object Mechanics Create a new class, name it according to its purpose Create a final field for the source object, and create a field for each parameter and each temporary variable Add a constructor to receive source object reference and all parameters Add a compute() method Copy code to compute(), use the reference to the source object when calling any of its methods. Compile Replace the original method with a comment: Create an object instance of the new class, and then call its compute() method. Internal Use Only 4/22/2011 12
20. 6.9 Substitute Algorithm 將函式本體替換為另一個演算法。 Motivation Clarity Mechanics Compile replacement code Run unit tests If test results are different, use old algorithm as basis for debugging Internal Use Only 4/22/2011 13