refactoring
Download
Skip this Video
Download Presentation
Refactoring

Loading in 2 Seconds...

play fullscreen
1 / 11

Refactoring - PowerPoint PPT Presentation


  • 175 Views
  • Uploaded on

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:

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Refactoring' - durin


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 (recall Shape and Fruit)
      • 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
composed method
Composed 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: replace complex code with a nice name
    • Inline Method: use code that\'s as easy to read as 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: _____
slide9

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 intboggleScoreOf(String word) {

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
  • Check out Martin\'s Refactoring Catalog from the refactoring page

http://www.refactoring.com/catalog/

ad