重構—改善既有程式的設計(chapter 6)
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,052
On Slideshare
1,022
From Embeds
30
Number of Embeds
2

Actions

Shares
Downloads
51
Comments
0
Likes
1

Embeds 30

http://chrisasia.blogspot.com 29
http://localhost 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Internal Use Only 4/22/2011
    1
    Ch 6: Composing Methods
    Refactoring: Improving The Design of Existing Code
  • 2. Internal Use Only 4/22/2011
    2
    Ch6: Composing Methods
    • 6.1 Extract Method
    • 3. 6.2 Inline Method
    • 4. 6.3 Inline Temp
    • 5. 6.4 Replace Temp with Query
    • 6. 6.5 Introduce Explaining Variable
    • 7. 6.6 Split Temporary Variable
    • 8. 6.7 Remove Assignments to Parameters
    • 9. 6.8 Replace Method with Method Object
    • 10. 6.9 Substitute Algorithm
  • 6.1 Extract Method
    將一段程式碼放進一個獨立函式中,並讓函式名稱解釋該函式的用途。
    Motivation
    Reusability
    Readability
    Easier to override
    Internal Use Only 4/22/2011
    3
  • 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
  • 21. Internal Use Only 4/22/2011
    14