Mistrz 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