![Page 1: Refaktorování - Code refactoringkfe.fjfi.cvut.cz/~hajeklu2/files/OOP/Hajek-Refactoring.pdf · 2013-10-08 · Refaktorování - Code refactoring Author: Luká Hájek Created Date:](https://reader030.vdocuments.mx/reader030/viewer/2022041021/5ed0f56e6bbc7a45107a645f/html5/thumbnails/1.jpg)
Co je refaktorování Historie Proč refaktorovat Kdy refaktorovat Jak refaktorovat Code obfuscation Shrnutí
RefaktorováníCode refactoring
Lukáš Hájek
Objektově orientované programováníČVUT v Praze - Fakulta jaderná a fyzikálně inženýrská
8. října 2013
1 / 31
![Page 2: Refaktorování - Code refactoringkfe.fjfi.cvut.cz/~hajeklu2/files/OOP/Hajek-Refactoring.pdf · 2013-10-08 · Refaktorování - Code refactoring Author: Luká Hájek Created Date:](https://reader030.vdocuments.mx/reader030/viewer/2022041021/5ed0f56e6bbc7a45107a645f/html5/thumbnails/2.jpg)
Co je refaktorování Historie Proč refaktorovat Kdy refaktorovat Jak refaktorovat Code obfuscation Shrnutí
Struktura prezentace
1 Co je refaktorování
2 Historie
3 Proč refaktorovat
4 Kdy refaktorovat
5 Jak refaktorovat
6 Code obfuscation
2 / 31
![Page 3: Refaktorování - Code refactoringkfe.fjfi.cvut.cz/~hajeklu2/files/OOP/Hajek-Refactoring.pdf · 2013-10-08 · Refaktorování - Code refactoring Author: Luká Hájek Created Date:](https://reader030.vdocuments.mx/reader030/viewer/2022041021/5ed0f56e6bbc7a45107a645f/html5/thumbnails/3.jpg)
Co je refaktorování Historie Proč refaktorovat Kdy refaktorovat Jak refaktorovat Code obfuscation Shrnutí
Co je refaktorování?
Systematický proces provádění změn v kódu bez ovlivněnífunkčnostiPouze drobné změnyVylepšení / zpřehlednění kódu
3 / 31
![Page 4: Refaktorování - Code refactoringkfe.fjfi.cvut.cz/~hajeklu2/files/OOP/Hajek-Refactoring.pdf · 2013-10-08 · Refaktorování - Code refactoring Author: Luká Hájek Created Date:](https://reader030.vdocuments.mx/reader030/viewer/2022041021/5ed0f56e6bbc7a45107a645f/html5/thumbnails/4.jpg)
Co je refaktorování Historie Proč refaktorovat Kdy refaktorovat Jak refaktorovat Code obfuscation Shrnutí
Historie
Na začátku 80. let mezi programátory jazyka Forth –pojem „factoring“Přelom 80. a 90. let – používání refaktorovacích technikprogramátory ve smalltalkuPočátek 90. let – první akademické práce o refaktorování(funckionální i procedurální)1999 – Fowler Martin, Refactoring: Improving the Designof Existing Code.
4 / 31
![Page 5: Refaktorování - Code refactoringkfe.fjfi.cvut.cz/~hajeklu2/files/OOP/Hajek-Refactoring.pdf · 2013-10-08 · Refaktorování - Code refactoring Author: Luká Hájek Created Date:](https://reader030.vdocuments.mx/reader030/viewer/2022041021/5ed0f56e6bbc7a45107a645f/html5/thumbnails/5.jpg)
Co je refaktorování Historie Proč refaktorovat Kdy refaktorovat Jak refaktorovat Code obfuscation Shrnutí
Proč refaktorovat?
Zvýšení přehlednosti kóduPři psaní programu je jednodušší myslet pouze nafunkčnostZefektivnění kóduOdstranění repetetivityZbavení se zbytečných proměnnýchZlepšení vlastní reprezentace jakožto programátora
5 / 31
![Page 6: Refaktorování - Code refactoringkfe.fjfi.cvut.cz/~hajeklu2/files/OOP/Hajek-Refactoring.pdf · 2013-10-08 · Refaktorování - Code refactoring Author: Luká Hájek Created Date:](https://reader030.vdocuments.mx/reader030/viewer/2022041021/5ed0f56e6bbc7a45107a645f/html5/thumbnails/6.jpg)
Co je refaktorování Historie Proč refaktorovat Kdy refaktorovat Jak refaktorovat Code obfuscation Shrnutí
Vyplatí se refaktorování?
6 / 31
![Page 7: Refaktorování - Code refactoringkfe.fjfi.cvut.cz/~hajeklu2/files/OOP/Hajek-Refactoring.pdf · 2013-10-08 · Refaktorování - Code refactoring Author: Luká Hájek Created Date:](https://reader030.vdocuments.mx/reader030/viewer/2022041021/5ed0f56e6bbc7a45107a645f/html5/thumbnails/7.jpg)
Co je refaktorování Historie Proč refaktorovat Kdy refaktorovat Jak refaktorovat Code obfuscation Shrnutí
Kdy refaktorovat? 1/2
Již při vývoji kódu (průběžně) – nedílná součást vývojePokud po nás bude kód číst někdo jinýPokud se chci ke kódu po nějaké době vrátitChceme si ujasnit cizí kódKód je ve špatném stavu, málo flexibilní, chybnýNelze nalézt chybu v kódu
7 / 31
![Page 8: Refaktorování - Code refactoringkfe.fjfi.cvut.cz/~hajeklu2/files/OOP/Hajek-Refactoring.pdf · 2013-10-08 · Refaktorování - Code refactoring Author: Luká Hájek Created Date:](https://reader030.vdocuments.mx/reader030/viewer/2022041021/5ed0f56e6bbc7a45107a645f/html5/thumbnails/8.jpg)
Co je refaktorování Historie Proč refaktorovat Kdy refaktorovat Jak refaktorovat Code obfuscation Shrnutí
„The first time you do something, you just do it. The secondtime you do something similar, you wince at the duplication,but you do the duplicate thing anyway. The third time you dosomething similar, you refactor.“
Don Roberts
8 / 31
![Page 9: Refaktorování - Code refactoringkfe.fjfi.cvut.cz/~hajeklu2/files/OOP/Hajek-Refactoring.pdf · 2013-10-08 · Refaktorování - Code refactoring Author: Luká Hájek Created Date:](https://reader030.vdocuments.mx/reader030/viewer/2022041021/5ed0f56e6bbc7a45107a645f/html5/thumbnails/9.jpg)
Co je refaktorování Historie Proč refaktorovat Kdy refaktorovat Jak refaktorovat Code obfuscation Shrnutí
Kdy refaktorovat? 2/2
Příliš mnoho publicMnoho komentářů (⇒ nejasný kód)Přílišné řetězeníDlouhé metodyVelké třídyŠpatná dědičnost
9 / 31
![Page 10: Refaktorování - Code refactoringkfe.fjfi.cvut.cz/~hajeklu2/files/OOP/Hajek-Refactoring.pdf · 2013-10-08 · Refaktorování - Code refactoring Author: Luká Hájek Created Date:](https://reader030.vdocuments.mx/reader030/viewer/2022041021/5ed0f56e6bbc7a45107a645f/html5/thumbnails/10.jpg)
Co je refaktorování Historie Proč refaktorovat Kdy refaktorovat Jak refaktorovat Code obfuscation Shrnutí
Refaktorujte brzo, refaktorujte často
10 / 31
![Page 11: Refaktorování - Code refactoringkfe.fjfi.cvut.cz/~hajeklu2/files/OOP/Hajek-Refactoring.pdf · 2013-10-08 · Refaktorování - Code refactoring Author: Luká Hájek Created Date:](https://reader030.vdocuments.mx/reader030/viewer/2022041021/5ed0f56e6bbc7a45107a645f/html5/thumbnails/11.jpg)
Co je refaktorování Historie Proč refaktorovat Kdy refaktorovat Jak refaktorovat Code obfuscation Shrnutí
Jak refaktorovat?
Opatrnost, nepřeceňování svých zkušenostíPro ladění rychlosti kódu – profilerPodrobný katalog na adresehttp://www.refactoring.com/catalog/
11 / 31
![Page 12: Refaktorování - Code refactoringkfe.fjfi.cvut.cz/~hajeklu2/files/OOP/Hajek-Refactoring.pdf · 2013-10-08 · Refaktorování - Code refactoring Author: Luká Hájek Created Date:](https://reader030.vdocuments.mx/reader030/viewer/2022041021/5ed0f56e6bbc7a45107a645f/html5/thumbnails/12.jpg)
Co je refaktorování Historie Proč refaktorovat Kdy refaktorovat Jak refaktorovat Code obfuscation Shrnutí
Pozor!Refaktorování je riskantní!
Připravovat sady testůTestovat po co nejmenších krocích
12 / 31
![Page 13: Refaktorování - Code refactoringkfe.fjfi.cvut.cz/~hajeklu2/files/OOP/Hajek-Refactoring.pdf · 2013-10-08 · Refaktorování - Code refactoring Author: Luká Hájek Created Date:](https://reader030.vdocuments.mx/reader030/viewer/2022041021/5ed0f56e6bbc7a45107a645f/html5/thumbnails/13.jpg)
Co je refaktorování Historie Proč refaktorovat Kdy refaktorovat Jak refaktorovat Code obfuscation Shrnutí
13 / 31
![Page 14: Refaktorování - Code refactoringkfe.fjfi.cvut.cz/~hajeklu2/files/OOP/Hajek-Refactoring.pdf · 2013-10-08 · Refaktorování - Code refactoring Author: Luká Hájek Created Date:](https://reader030.vdocuments.mx/reader030/viewer/2022041021/5ed0f56e6bbc7a45107a645f/html5/thumbnails/14.jpg)
Co je refaktorování Historie Proč refaktorovat Kdy refaktorovat Jak refaktorovat Code obfuscation Shrnutí
Martin Fowler – 22 „pachů“ kóduPro každý „pach“ jiná technika
by Kent Beck and Martin Fowler„If it stinks, change it.“
Grandma Beck, discussing child-rearing philosophy
14 / 31
![Page 15: Refaktorování - Code refactoringkfe.fjfi.cvut.cz/~hajeklu2/files/OOP/Hajek-Refactoring.pdf · 2013-10-08 · Refaktorování - Code refactoring Author: Luká Hájek Created Date:](https://reader030.vdocuments.mx/reader030/viewer/2022041021/5ed0f56e6bbc7a45107a645f/html5/thumbnails/15.jpg)
Co je refaktorování Historie Proč refaktorovat Kdy refaktorovat Jak refaktorovat Code obfuscation Shrnutí
Duplicitní volání u podmínek
if (isSpecialDeal()) {total = price * 0.95;send();}
else {total = price * 0.98;send();}
Nahradit za:
if (isSpecialDeal())total = price * 0.95;
elsetotal = price * 0.98;
send();
15 / 31
![Page 16: Refaktorování - Code refactoringkfe.fjfi.cvut.cz/~hajeklu2/files/OOP/Hajek-Refactoring.pdf · 2013-10-08 · Refaktorování - Code refactoring Author: Luká Hájek Created Date:](https://reader030.vdocuments.mx/reader030/viewer/2022041021/5ed0f56e6bbc7a45107a645f/html5/thumbnails/16.jpg)
Co je refaktorování Historie Proč refaktorovat Kdy refaktorovat Jak refaktorovat Code obfuscation Shrnutí
Duplicitní kódRodičovská třída
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 10
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
Milk Beer
Drink
getName() getName()
16 / 31
![Page 17: Refaktorování - Code refactoringkfe.fjfi.cvut.cz/~hajeklu2/files/OOP/Hajek-Refactoring.pdf · 2013-10-08 · Refaktorování - Code refactoring Author: Luká Hájek Created Date:](https://reader030.vdocuments.mx/reader030/viewer/2022041021/5ed0f56e6bbc7a45107a645f/html5/thumbnails/17.jpg)
Co je refaktorování Historie Proč refaktorovat Kdy refaktorovat Jak refaktorovat Code obfuscation Shrnutí
Duplicitní kódRodičovská třída — správný postup
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 10
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
Milk Beer
Drink
getName()
17 / 31
![Page 18: Refaktorování - Code refactoringkfe.fjfi.cvut.cz/~hajeklu2/files/OOP/Hajek-Refactoring.pdf · 2013-10-08 · Refaktorování - Code refactoring Author: Luká Hájek Created Date:](https://reader030.vdocuments.mx/reader030/viewer/2022041021/5ed0f56e6bbc7a45107a645f/html5/thumbnails/18.jpg)
Co je refaktorování Historie Proč refaktorovat Kdy refaktorovat Jak refaktorovat Code obfuscation Shrnutí
Vícenásobné podmínky
Původně:
double disabilityAmount() {if (_seniority < 2) return 0;if (_monthsDisabled > 12) return 0;if (_isPartTime) return 0;// compute the disability amount
Nahradit za:
double disabilityAmount() {if (isNotEligableForDisability()) return 0;// compute the disability amount
18 / 31
![Page 19: Refaktorování - Code refactoringkfe.fjfi.cvut.cz/~hajeklu2/files/OOP/Hajek-Refactoring.pdf · 2013-10-08 · Refaktorování - Code refactoring Author: Luká Hájek Created Date:](https://reader030.vdocuments.mx/reader030/viewer/2022041021/5ed0f56e6bbc7a45107a645f/html5/thumbnails/19.jpg)
Co je refaktorování Historie Proč refaktorovat Kdy refaktorovat Jak refaktorovat Code obfuscation Shrnutí
Komplikované if-then-else
Původně:
if (date.before (SUMMER_START) ||date.after(SUMMER_END))
charge = quantity * _winterRate+ _winterServiceCharge;
else charge = quantity * _summerRate;
Nahradit za:
if (notSummer(date))charge = winterCharge(quantity);
else charge = summerCharge (quantity);
19 / 31
![Page 20: Refaktorování - Code refactoringkfe.fjfi.cvut.cz/~hajeklu2/files/OOP/Hajek-Refactoring.pdf · 2013-10-08 · Refaktorování - Code refactoring Author: Luká Hájek Created Date:](https://reader030.vdocuments.mx/reader030/viewer/2022041021/5ed0f56e6bbc7a45107a645f/html5/thumbnails/20.jpg)
Co je refaktorování Historie Proč refaktorovat Kdy refaktorovat Jak refaktorovat Code obfuscation Shrnutí
Veřejné → soukromé
Původně:
public String _name
Nahradit za:
private String _name;public String getName() {return _name;}public void setName(String arg) {_name = arg;}
20 / 31
![Page 21: Refaktorování - Code refactoringkfe.fjfi.cvut.cz/~hajeklu2/files/OOP/Hajek-Refactoring.pdf · 2013-10-08 · Refaktorování - Code refactoring Author: Luká Hájek Created Date:](https://reader030.vdocuments.mx/reader030/viewer/2022041021/5ed0f56e6bbc7a45107a645f/html5/thumbnails/21.jpg)
Co je refaktorování Historie Proč refaktorovat Kdy refaktorovat Jak refaktorovat Code obfuscation Shrnutí
21 / 31
![Page 22: Refaktorování - Code refactoringkfe.fjfi.cvut.cz/~hajeklu2/files/OOP/Hajek-Refactoring.pdf · 2013-10-08 · Refaktorování - Code refactoring Author: Luká Hájek Created Date:](https://reader030.vdocuments.mx/reader030/viewer/2022041021/5ed0f56e6bbc7a45107a645f/html5/thumbnails/22.jpg)
Co je refaktorování Historie Proč refaktorovat Kdy refaktorovat Jak refaktorovat Code obfuscation Shrnutí
Příliš dlouhá metoda nebo struktura
Duplicitní kódDříve – snaha o co nejmenší počet voláníDnes – přehlednost
22 / 31
![Page 23: Refaktorování - Code refactoringkfe.fjfi.cvut.cz/~hajeklu2/files/OOP/Hajek-Refactoring.pdf · 2013-10-08 · Refaktorování - Code refactoring Author: Luká Hájek Created Date:](https://reader030.vdocuments.mx/reader030/viewer/2022041021/5ed0f56e6bbc7a45107a645f/html5/thumbnails/23.jpg)
Co je refaktorování Historie Proč refaktorovat Kdy refaktorovat Jak refaktorovat Code obfuscation Shrnutí
Vyjmutí metody
Původně:
void printOwing() {printBanner();
//print detailsSystem.out.println ("name: " + _name);System.out.println ("amount " + getOutstanding());}
23 / 31
![Page 24: Refaktorování - Code refactoringkfe.fjfi.cvut.cz/~hajeklu2/files/OOP/Hajek-Refactoring.pdf · 2013-10-08 · Refaktorování - Code refactoring Author: Luká Hájek Created Date:](https://reader030.vdocuments.mx/reader030/viewer/2022041021/5ed0f56e6bbc7a45107a645f/html5/thumbnails/24.jpg)
Co je refaktorování Historie Proč refaktorovat Kdy refaktorovat Jak refaktorovat Code obfuscation Shrnutí
Vyjmutí metodyOprava
Nahradit za:
void printOwing() {printBanner();printDetails(getOutstanding());}
void printDetails (double outstanding) {System.out.println ("name: " + _name);System.out.println ("amount " + outstanding);}
24 / 31
![Page 25: Refaktorování - Code refactoringkfe.fjfi.cvut.cz/~hajeklu2/files/OOP/Hajek-Refactoring.pdf · 2013-10-08 · Refaktorování - Code refactoring Author: Luká Hájek Created Date:](https://reader030.vdocuments.mx/reader030/viewer/2022041021/5ed0f56e6bbc7a45107a645f/html5/thumbnails/25.jpg)
Co je refaktorování Historie Proč refaktorovat Kdy refaktorovat Jak refaktorovat Code obfuscation Shrnutí
Příliš dlouhá metodaOdstranění nepotřebných proměnných
Původně:
double basePrice = anOrder.basePrice();return (basePrice > 1000)
Nahradit za:
return (anOrder.basePrice() > 1000)
25 / 31
![Page 26: Refaktorování - Code refactoringkfe.fjfi.cvut.cz/~hajeklu2/files/OOP/Hajek-Refactoring.pdf · 2013-10-08 · Refaktorování - Code refactoring Author: Luká Hájek Created Date:](https://reader030.vdocuments.mx/reader030/viewer/2022041021/5ed0f56e6bbc7a45107a645f/html5/thumbnails/26.jpg)
Co je refaktorování Historie Proč refaktorovat Kdy refaktorovat Jak refaktorovat Code obfuscation Shrnutí
Dlouhý seznam parametrůPředávání celého objektu
Původně:
int min = dailyTemperature.getMin();int max = dailyTemperature.getMax();myStat = stat.range(min, max);
Nahradit za:
myStat = stat.range(&dailyTemperature);
26 / 31
![Page 27: Refaktorování - Code refactoringkfe.fjfi.cvut.cz/~hajeklu2/files/OOP/Hajek-Refactoring.pdf · 2013-10-08 · Refaktorování - Code refactoring Author: Luká Hájek Created Date:](https://reader030.vdocuments.mx/reader030/viewer/2022041021/5ed0f56e6bbc7a45107a645f/html5/thumbnails/27.jpg)
Co je refaktorování Historie Proč refaktorovat Kdy refaktorovat Jak refaktorovat Code obfuscation Shrnutí
Komentáře
Špatně pojmenovaná funkce?Nejasný kód?Komentáře uvnitř metod – lepší vyjmout na samostatnémísto
Co, jak a proč metoda dělá
27 / 31
![Page 28: Refaktorování - Code refactoringkfe.fjfi.cvut.cz/~hajeklu2/files/OOP/Hajek-Refactoring.pdf · 2013-10-08 · Refaktorování - Code refactoring Author: Luká Hájek Created Date:](https://reader030.vdocuments.mx/reader030/viewer/2022041021/5ed0f56e6bbc7a45107a645f/html5/thumbnails/28.jpg)
Co je refaktorování Historie Proč refaktorovat Kdy refaktorovat Jak refaktorovat Code obfuscation Shrnutí
Přiřazení
Původně:
int x;x = 7;
Nahradit za:
int x = 7;
Hodnota vždy nastavenáZpomalení (C++)
28 / 31
![Page 29: Refaktorování - Code refactoringkfe.fjfi.cvut.cz/~hajeklu2/files/OOP/Hajek-Refactoring.pdf · 2013-10-08 · Refaktorování - Code refactoring Author: Luká Hájek Created Date:](https://reader030.vdocuments.mx/reader030/viewer/2022041021/5ed0f56e6bbc7a45107a645f/html5/thumbnails/29.jpg)
Co je refaktorování Historie Proč refaktorovat Kdy refaktorovat Jak refaktorovat Code obfuscation Shrnutí
Code obfuscation
Inverzní postup k refaktorování
char*f="char*f=%c%s%c;main(){printf(f,34,f,34,10);}%c";main(){printf(f,34,f,34,10);}
29 / 31
![Page 30: Refaktorování - Code refactoringkfe.fjfi.cvut.cz/~hajeklu2/files/OOP/Hajek-Refactoring.pdf · 2013-10-08 · Refaktorování - Code refactoring Author: Luká Hájek Created Date:](https://reader030.vdocuments.mx/reader030/viewer/2022041021/5ed0f56e6bbc7a45107a645f/html5/thumbnails/30.jpg)
Co je refaktorování Historie Proč refaktorovat Kdy refaktorovat Jak refaktorovat Code obfuscation Shrnutí
Shrnutí
Refaktorování - co to jeKdy a proč refaktorovatTechniky refaktorování
30 / 31
![Page 31: Refaktorování - Code refactoringkfe.fjfi.cvut.cz/~hajeklu2/files/OOP/Hajek-Refactoring.pdf · 2013-10-08 · Refaktorování - Code refactoring Author: Luká Hájek Created Date:](https://reader030.vdocuments.mx/reader030/viewer/2022041021/5ed0f56e6bbc7a45107a645f/html5/thumbnails/31.jpg)
Co je refaktorování Historie Proč refaktorovat Kdy refaktorovat Jak refaktorovat Code obfuscation Shrnutí
Děkuji za pozornost!
Celá prezentace je dostupná nahttp://kfe.fjfi.cvut.cz/~hajeklu2/files/OOP/
31 / 31