Refactoring
This presentation is the property of its rightful owner.
Sponsored Links
1 / 14

Refactoring PowerPoint PPT Presentation


  • 93 Views
  • Uploaded on
  • Presentation posted in: General

Refactoring. Small changes to code to improve it. Refactoring Defined. A change made to the internal structure of software to make it easier to understand and cheaper to modify without changing its observable behavior. — Refactoring , Martin Fowler. et. al. , page 53. Martin wrote the book:

Download Presentation

Refactoring

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Refactoring

Refactoring

Small changes to code to improve it


Refactoring defined

Refactoring Defined

  • A change made to the internal structure of software to make it easier to understand and cheaper to modify without changing its observable behavior.— Refactoring, Martin Fowler. et. al. , page 53.

    • Martin wrote the book:

      Refactoring

      Improving the Design of Existing Code

    • Refactoring owes a lot to a Refactoring: William Opdyke's PhD thesis


Write drafts and revise

Write Drafts and Revise

  • All good writing is based upon revision.— Jacques Barzun, Simple & Direct, 4th Edition

  • Revision means "to look at again"

  • Example: Before 4-July, 1776, Thomas Jefferson's draft of the Declaration of Independence had this 

    "We hold these truths to be sacred and undeniable, ..."

  • He let his friend Benjamin Franklin look over this draft to make changes including this:

    "We hold these truths to be self-evident, ..."

  • Total of 47 revisions, then Congress made 39 more

    http://www.weeklyreader.com/googledocs/pdfs/revisionfiles.pdf


Refactoring happens

Refactoring Happens

  • In larger systems (frameworks), code will be read and modified more frequently than it will be written

  • Refactoring typically involves

    • Removing duplicated or dead code

    • Simplifying complex code

    • Clarifying unclear code

  • It turns out that removing code can actually be a good thing: your system has fewer lines of code

    • Easier to develop, maintain, and change

  • Refactoring can be risky, unless you do it in small steps and have automated tests that can be run anytime


A few examples

A few examples

  • A few refactorings we've seen (they have names)

    • Encapsulate Field (do this virtually always)

      • add getters and/or setters to access a field

    • Rename Method (often)

    • Extract SuperClass (Shape and AbstractStudent)

      • You have two classes with similar features

      • Create a superclass and move common features to the superclass

    • Compose Method

      • A variety of refactorings can happen at the method level


Compose method

Compose Method

  • Some refactoring attempts to "compose" methods

  • A composed method is relatively short by using calls to a small number of coherent elements

    • Easier to understand what the method does

  • Some refactorings for composing methods

    • Extract Method

    • Inline Method

  • Code demo: Compose insertElement in ArrayPriorityList


Before

Before

public void insertElementAt(int index, E el) {

// If need to grow array, grow it

if (size() == data.length) {

Object[] temp = new Object[data.length + 20];

for (int i = 0; i < size; i++)

temp[i] = data[i];

data = temp;

}

// Shift array elements right to make room

for (int j = size; j > index; j--) {

data[j] = data[j - 1];

}

// Add new element at the provided index

data[index] = el;

size++;

}


After

After

public void insertElementAt(int index, E el) {

if (shouldGrowArray())

gowArray();

makeRoomAt(index);

addAt(index, el);

}

  • Is the new insertElementAt more readable?

    • Vote: Yes: ____ Nay: _____

  • Are the extra private methods in the way?

    • Vote: Yes: ____ Nay: _____


Refactoring

private void addAt(int index, E el) {

data[index] = el;

size++;

}

private void makeRoomAt(int index) {

for (int j = size; j > index; j--) {

data[j] = data[j - 1];

}

}

private void gowArray() {

Object[] temp = new Object[data.length + 20];

for (int i = 0; i < size; i++)

temp[i] = data[i];

data = temp;

}


Replace nested conditional with guard clauses see link

Replace Nested Conditional with Guard Clauses see link

private intscoreOf(String next) {

int sum = 0;

if (next.length() == 3 || next.length() == 4)

sum = 1;

else if (next.length() == 5)

sum = 2;

else if (next.length() == 6)

sum = 3;

else if (next.length() == 7)

sum = 5;

else if (next.length() >= 8)

sum = 11;

else

sum = 0;

return sum;

}


Refactoring catalog

Refactoring Catalog

  • Buy the book or check out Martin's Refactoring Catalog from the refactoring pagehttp://www.refactoring.com/

  • Find catalog link and then find and read Inline Method

  • Next Tuesday, 1-Dec, I will ask you to read all 27 Refactorings on the next slide to prepare for test 2 on Thursday 3-Dec

    • I will give a sample test question follows the list 27


Refactoring

  • Read the following refactorings from http://www.refactoring.com/catalog/index.html  (listed here in alphabetic order)

    Modifier


A dozen questions like this

A dozen questions like this

g) Which design is better, Ior II? Why?

Ivoid printOwing() {

printBanner();

// print details

System.out.println("name: " + _name);

System.out.println("amount " + getOutstanding());

}  

II void printOwing() {

printBanner();

printDetails(getOutstanding());

}

void printDetails (double outstanding) {

System.out.println ("name: " + _name);

System.out.println ("amount " + outstanding);

}


Answer

Answer

g) II

Why?

If you have a code fragment that can be grouped together, use Extract Method to turn the fragment into a method whose name explains the purpose of the method


  • Login