Refactoring Mehdi Einali Advanced Programming in Java 1.
-
Upload
hillary-oliver -
Category
Documents
-
view
226 -
download
0
Transcript of Refactoring Mehdi Einali Advanced Programming in Java 1.
3
Once upon a time …A team start a project
Project got many attention and team has to add new features in short time
“I will fix this later”
4
After a whileChanges slowed down by messy code
As productivity decreases more programmer assigned to project
New programmer with messy code results in more messy code
5
rebellionEventually the team rebels.
A new tiger team is selectedBest technologies has been chosen
Now the two teams are in a race
This race can go on for a very long time
Tiger team is now under pleasure of comparison with old low feature but working version
Messy code again and again once upon a time
7
RefactoringA disciplined way to restructure code
in order to improve code qualitywithout changing its behavior
A change made to the internal structure of software to make it easier to understand and cheaper to modify without changing its observable behavior.
8
RefactoringRefactoring is the process of changing a software system In such a way that it does not alter the external behavior of the code But improves its internal structureIt is a disciplined way to clean up code It minimizes the chances of introducing bugsWhen you refactor, you are improving the design of the code after it has been written.
9
Refactoring
By continuously improving the design of code, we make it easier and easier to work with
Joshua Kerievsky, Refactoring to Patterns
10
ExampleDuplicate CodeWhat are the drawbacks?What is the solution?
Refactoring:Finding a “Bad Smell”Changing the code to remove the bad smell
Some well-known bad smells are reported
11
Bad SmellA bad smell in codeAny symptom in the source code that possibly indicates a deeper problem.The term is coined by Kent Beck.
13
Refactoring TechniquesExtract MethodMove
MethodVariableClass
Extract ClassRename
MethodVariableClass
Pull UpPush Down
15
The Two HatsKent Beck's metaphor of two hatsDivide your time between two distinct activities
adding functionrefactoring
16
Why Should I Refactor?Improves the Design of SoftwareMakes Software Easier to UnderstandHelps You Find BugsHelps You Program Faster
Refactoring makes your code more maintainable
17
When Should You Refactor?
The Rule of Three:Refactor When You Add FunctionRefactor When You Need to Fix a BugRefactor As You Do a Code Review
18
Scanner s = new Scanner(System.in);
System.out.println("Rectangle Info.");System.out.print("Enter the width: ");int a1 = s.nextInt();System.out.print("Enter the length: ");int a2 = s.nextInt();
System.out.println("Rectangle Info.");System.out.print("Enter the width: ");int b1 = s.nextInt();System.out.print("Enter the length: ");int b2 = s.nextInt();
int x = a1*a2;int y = b1*b2;
if(x == y)System.out.println("Equal");
Find bad smells!
Refactor the Code!
19
Scanner scanner = new Scanner(System.in);
System.out.println("Rectangle Info.");System.out.print("Enter the width: ");int width1 = scanner.nextInt();System.out.print("Enter the length: ");int length1 = scanner.nextInt();
System.out.println("Rectangle Info.");System.out.print("Enter the width: ");int width2 = scanner.nextInt();System.out.print("Enter the length: ");int length2 = scanner.nextInt();
int area1 = width1*length1;int area2 = width2*length2;
if(area1 == area2)System.out.println("Equal");
Rename…
20
class Rectangle{private int length , width;public int getLength() {
return length;}public void setLength(int length) {
this.length = length;}public int getWidth() {
return width;}public void setWidth(int width) {
this.width = width;}public Rectangle(int length, int width) {
this.length = length;this.width = width;
}}
Extract Class…
21
Scanner scanner = new Scanner(System.in);
System.out.println("Rectangle Info.");System.out.print("Enter the width: ");int width = scanner.nextInt();System.out.print("Enter the length: ");int length = scanner.nextInt();Rectangle rectangle1 = new Rectangle(length, width);
System.out.println("Rectangle Info.");System.out.print("Enter the width: ");width = scanner.nextInt();System.out.print("Enter the length: ");length = scanner.nextInt();Rectangle rectangle2 = new Rectangle(length, width);
int area1 = rectangle1.getWidth()*rectangle1.getLength();int area2 = rectangle2.getWidth()*rectangle2.getLength();
if(area1 == area2)System.out.println("Equal");
22
class Rectangle{...public int area(){
return length * width;}
}
…int area1 = rectangle1.area();int area2 = rectangle2.area();
Extract Method…
23
private static Rectangle readRectangle(Scanner scanner) {int width;int length;System.out.println("Rectangle Info.");System.out.print("Enter the width: ");width = scanner.nextInt();System.out.print("Enter the length: ");length = scanner.nextInt();Rectangle rectangle2 = new Rectangle(length, width);return rectangle2;
}
Extract Method…
24
Refactored CodeScanner scanner = new Scanner(System.in);
Rectangle rectangle1 = readRectangle(scanner);Rectangle rectangle2 = readRectangle(scanner);
int area1 = rectangle1.area();int area2 = rectangle2.area();
if(area1 == area2)System.out.println("Equal");
30
(Conclusion)Clean code isMake if hard for bugs to hideClean code does one thing wellReads like well-written prose
Never obscure the designer’s intentProvides one way rather than many ways for doing one thingEach routine you read turn out to be pretty much what you expect
31
notesClean Programming is some thing like martial art
Combination of technique and art.The Art of Computer Programming by Knuth
Have different school of thoughts
Clean Programming is skill Good learning results in good use forever
Changing bad learning is hardLike Driving!
32
ReferenceRefactoring: improving the design of existing code, Martin Fowler, Kent Beck,John Brant, William Opdyke, Don Roberts(1999)Clean code,A handbook of agile software craftmanship,Robert C Martin,2008, Prentice Hall