Table Of ContentMistrz Programowania(cid:13)R BNS IT, http://www.bnsit.pl
Mariusz Sieraczkiewicz
Ksiaz˙ka z serii Mistrz Programowania(cid:13)R
(cid:44)
Jak ca(cid:32)lkowicie odmieni´c spos´ob
programowania uz˙ywajac refaktoryzacji
(cid:44)
Przedmowa Micha(cid:32)l Bartyzel
BNS IT (cid:13)c 2009
(cid:13)c Copyright for Polish edition by BNS IT s. c.
Data: 09.03.2009
Wersja 151
Tytu(cid:32)l: Jak ca(cid:32)lkowicie odmieni´c sposo´b programowania uz˙ywajac refaktoryzacji
(cid:44)
Autor: Mariusz Sieraczkiewicz
Wszystkie znaki firmowe bad´z towarowe wystepujace w tek´scie sa zastrzez˙onymi
(cid:44) (cid:44) (cid:44) (cid:44)
znakami firmowymi bad´z towarowymi ich w(cid:32)la´scicieli.
(cid:44)
Pierwszetrzyrozdzia(cid:32)lytejksiaz˙kisaudostepnianebezp(cid:32)latnie.Pozosta(cid:32)lerozdzia(cid:32)ly
(cid:44) (cid:44) (cid:44)
dostepne sa w p(cid:32)latnej wersji ksiaz˙ki. Zabronione sa jakiekolwiek zmiany w zawar-
(cid:44) (cid:44) (cid:44) (cid:44)
to´sci publikacji bez pisemnej zgody BNS IT s. c. Zabrania sie jej odsprzedaz˙y.
(cid:44)
Aby dowiedzie´c sie wiecej o pe(cid:32)lnej wersji, kliknij tutaj
(cid:44) (cid:44)
Autor oraz BNS IT s. c. do(cid:32)loz˙yli wszelkich staran´, aby zawarte w tej ksiaz˙ce infor-
(cid:44)
macje by(cid:32)ly kompletne i rzetelne. Nie biora jednak z˙adnej odpowiedzialno´sci za ich
(cid:44)
wykorzystanie, ani za zwiazane z tym ewentualne naruszenie praw patentowych
(cid:44)
lub autorskich. Autor oraz BNS IT s. c. nie ponosza ro´wniez˙ z˙adnej odpowie-
(cid:44)
dzialno´sci ze ewentualne szkody wynik(cid:32)le z wykorzystania informacji zawartych w
ksiaz˙ce.
(cid:44)
BNS IT s. c.
ul. Wyszyn´skiego 22 lok. 17
94 - 042 L(cid:32) ´od´z
www.bnsit.pl
[email protected]
Wszelkie prawa zastrzez˙one.
All rights reserved.
Mistrz Programowania(cid:13)R BNS IT, http://www.bnsit.pl
Mojej najwspanialszej z˙onie Kamili i co´rce Poli, kto´ra juz˙ nied(cid:32)lugo zobacze
(cid:44) (cid:44)
Mariusz Sieraczkiewicz
Trener, konsultant, menedz˙er projekto´w IT, coach. Za(cid:32)loz˙yciel zespo(cid:32)lu programi-
st´ow Equilibrium. Wsp´o(cid:32)linicjator JUGa L(cid:32) ´od´z. Autor artyku(cid:32)l´ow o inz˙ynierii opro-
gramowania. Wspo´(cid:32)lw(cid:32)la´sciciel firmy szkoleniowej BNS IT.
Z jezykiem Java ma do czynienia od dziewieciu lat na stanowiskach programisty,
(cid:44) (cid:44)
projektanta, architekta, analityka biznesowego, kierownika projekt´ow i kierownika
zespo(cid:32)lu.
Jego pasja jest programowanie i aspekty psychologiczne pracy programist´ow. Po-
(cid:44)
szukuje wyznaczniko´w efektywno´sci programisty szczego´lnie w obszarze zarza-
(cid:44)
dzania czasem, inteligencji emocjonalnej, przekonan´, pracy w zespole, motywacji
i ich wp(cid:32)lywu na codzienna prace.
(cid:44) (cid:44)
Mistrz Programowania(cid:13)R BNS IT, http://www.bnsit.pl
SPISTRES´CI
Spis tre´sci
Przedmowa 7
Wstep 9
(cid:44)
Zacza´c od siebie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
(cid:44)
Dla kogo jest ta ksiaz˙ka . . . . . . . . . . . . . . . . . . . . . . . . . 10
(cid:44)
Podziekowania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
(cid:44)
1 Refaktoryzacja - o co tyle krzyku 13
Czym jest refaktoryzacja? . . . . . . . . . . . . . . . . . . . . . . . . 14
Postulaty nowoczesnej inz˙ynierii oprogramowania, czyli odpowied´z na
pytanie Dlaczego?” . . . . . . . . . . . . . . . . . . . . . . . . 14
”
Postulaty dotyczace wspo´(cid:32)lczesnej inz˙ynierii oprogramowania . . . 14
(cid:44)
Koszt wytwarzania oprogramowania . . . . . . . . . . . . . . . . 15
Entropia wzrasta . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Refaktoryzacja w locie . . . . . . . . . . . . . . . . . . . . . . . 16
Refaktoryzacja ewolucyjna . . . . . . . . . . . . . . . . . . . . . 17
Najwaz˙niejsza ze wszystkich zasad - wydzielanie odpowiedzialno´sci 17
Antywzorce w kodzie . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Don’t repeat yourself (DRY) - likwiduj powt´orzenia . . . . . . . 19
D(cid:32)lugie metody i duz˙e klasy . . . . . . . . . . . . . . . . . . . . 19
Zmiana lub dodanie funkcjonalno´sci powoduje konieczno´s´c wielu
zmian w systemie . . . . . . . . . . . . . . . . . . . . . 20
Metoda danej klasy wykonuje zbyt wiele operacji na innych klasach 20
Analogiczne instrukcje warunkowe w r´oz˙nych miejscach w projekcie 20
Nie two´rz byt´ow ponad miare . . . . . . . . . . . . . . . . . . . 20
(cid:44)
Pola tymczasowe . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Klasa przechowujaca tylko i wy(cid:32)lacznie dane . . . . . . . . . . . . 21
(cid:44) (cid:44)
Komentarze . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Testowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Mistrz Programowania(cid:13)R BNS IT, http://www.bnsit.pl
SPISTRES´CI
2 Kod, kt´ory czyta sie jak ksiaz˙ke - techniki, kt´ore ca(cid:32)lkowicie
(cid:44) (cid:44) (cid:44)
odmienia twoje z˙ycie programisty 23
(cid:44)
Co to znaczy - czyta´c jak ksiaz˙ke . . . . . . . . . . . . . . . . . . . . 24
(cid:44) (cid:44)
Przyk(cid:32)lad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Bardzo kro´tkie wprowadzenie do wyraz˙en´ regularnych . . . . . . 30
Analiza struktury strony . . . . . . . . . . . . . . . . . . . . . . 31
Podstawowa zasada - wydzielanie odpowiedzialno´sci . . . . . . . . . . 36
Refaktoryzacja: Wydzielenie metody . . . . . . . . . . . . . . . . . . . 37
Refaktoryzacja: Zmiana nazwy klasy, metody, atrybutu lub zmiennej . . 41
Refaktoryzacja: Wydzielenie zmiennej tymczasowej . . . . . . . . . . . 47
Nazywanie warunk´ow . . . . . . . . . . . . . . . . . . . . . . . 49
Z(cid:32)lote regu(cid:32)ly refaktoryzacji . . . . . . . . . . . . . . . . . . . . . . . . 51
Kod trudny w testowaniu prawdopodobnie nadaje sie do refaktoryzacji 52
(cid:44)
3 Jak uz˙ywa´c refaktoryzacji do tworzenia w pe(cid:32)lni obiektowych
aplikacji 55
Nawyki skutecznej refaktoryzacji . . . . . . . . . . . . . . . . . . . . 55
Aby zrozumie´c, musisz do´swiadczy´c . . . . . . . . . . . . . . . . 55
To nie techniki dzia(cid:32)laja — to ludzie dzia(cid:32)laja . . . . . . . . . . . 56
(cid:44) (cid:44)
Racjonalizacja . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Przekonania . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Co nagle, to po diable . . . . . . . . . . . . . . . . . . . . . . . . . . 58
D(cid:32)lugie metody nie sa wcale dobre . . . . . . . . . . . . . . . . . . . . 58
(cid:44)
Refaktoryzacja: Zastapienie metody przez obiekt reprezentujacy metode 60
(cid:44) (cid:44) (cid:44)
Refaktoryzacja: Zmiana algorytmu na pisany ludzkim jezykiem . . . . . 62
(cid:44)
Refaktoryzacja: Wprowadzenie klarownej obs(cid:32)lugi wyjatko´w . . . . . . . 66
(cid:44)
D(cid:32)lawienie wyjatko´w . . . . . . . . . . . . . . . . . . . . . . . . 66
(cid:44)
Refaktoryzacja: Zmiana nazwy metody . . . . . . . . . . . . . . . . . 69
Refaktoryzacja: Zastapienie metody poruszania sie po z(cid:32)loz˙onej struk-
(cid:44) (cid:44)
turze wzorcem Iteratora . . . . . . . . . . . . . . . . . . . . . . 74
Refaktoryzacja: Przeniesienie metody i przeniesienie pola . . . . . . . . 74
Kon´cowe porzadki czyli refaktoryzacja: Zmien´ implementacje algorytmu 80
(cid:44) (cid:44)
Strategia najlepszych programist´ow: Ma(cid:32)le kroki . . . . . . . . . . . . . 83
Mistrz Programowania(cid:13)R BNS IT, http://www.bnsit.pl
SPISTRES´CI
4 Tajemnica mistrz´ow refaktoryzacji 85
Refaktoryzacja: Wydzielenie interfejsu . . . . . . . . . . . . . . . . . . 85
Kierunek wprowadzania interfejso´w . . . . . . . . . . . . . . . . . . . 86
Inny przyk(cid:32)lad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Strategia skutecznych programisto´w: Usuwaj powto´rzenia . . . . . . . 90
Refaktoryzacja: Wydzielenie klasy abstrakcyjnej . . . . . . . . . . . . . 90
Najwaz˙niejsze odkrycie! . . . . . . . . . . . . . . . . . . . . . . . . . 91
Mistrzostwo ...zobacz co sie zmieni(cid:32)lo . . . . . . . . . . . . . . . . . 92
(cid:44)
5 Pragmatyzm przede wszystkim 95
Dlaczego refaktoryzacja nie jest dobra na wszystko . . . . . . . . . . . 95
Dziesie´c przykazan´ dotyczacych refaktoryzacji . . . . . . . . . . . . . . 96
(cid:44) (cid:44)
6 I co dalej ...- inne ´zr´od(cid:32)la 97
Warsztaty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Szkolenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Trening indywidualny . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Ksiaz˙ki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
(cid:44)
Inne ´zro´d(cid:32)la w sieci . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Mistrz Programowania(cid:13)R BNS IT, http://www.bnsit.pl
Przedmowa
Wiekszo´s´c programisto´w wie, co to refaktoryzacja, zna zalety wynikajace z jej
(cid:44) (cid:44)
stosowania, zna ro´wniez˙ konsekwencje zaniedbywania refaktoryzacji. Jednocze-
´snie wielu programist´ow uwaz˙a, z˙e refaktoryzacja to bardzo kosztowny proces,
wymaga wysi(cid:32)lku i brak na nia czasu w szybko zmieniajacych sie warunkach biz-
(cid:44) (cid:44) (cid:44)
nesowych.
W tej niesamowitej ksiaz˙ce, Mariusz zaprezentuje Ci kilka bardzo prostych
(cid:44)
sposobo´w refaktoryzacji kodu. Dowiesz sie, jak w (cid:32)latwy spos´ob stosowa´c refak-
(cid:44)
toryzacje w twoim projekcie. Ostrzegam, z˙e legna w gruzach twoje z trudem
(cid:44) (cid:44)
wypracowane przekonania. By´c moz˙e zaczniesz uwaz˙a´c, z˙e refaktoryzacja jest
niezwykle prosta, zajmuje bardzo ma(cid:32)lo czasu i nie sprawia trudno´sci. Ze zdziwie-
niem bedziesz sie zastanawia´c, jak to sie sta(cid:32)lo, z˙e wcze´sniej nie uz˙ywa(cid:32)le´s tych
(cid:44) (cid:44) (cid:44)
technik. Powodzenia!
Micha(cid:32)l Bartyzel
7
Mistrz Programowania(cid:13)R BNS IT, http://www.bnsit.pl
PRZEDMOWA
8
Mistrz Programowania(cid:13)R BNS IT, http://www.bnsit.pl