Refaktoryzacja Ulepszanie struktury istniejacego kodu.pdf

(730 KB) Pobierz
Idź do
• Spis treści
• Przykładowy rozdział
• Skorowidz
Katalog książek
• Katalog online
• Zamów drukowany
katalog
Twój koszyk
• Dodaj do koszyka
Cennik i informacje
• Zamów informacje
o nowościach
• Zamów cennik
Czytelnia
• Fragmenty książek
online
Refaktoryzacja. Ulepszanie
struktury istniejącego kodu
Autorzy:
Martin Fowler,
Kent Beck, John Brant,
William Opdyke, Don Roberts
Tłumaczenie: Justyna Walkowska
ISBN: 978-83-246-3243-5
Tytuł oryginału:
Refactoring: Improving the Design of Existing Code
Format: 172×245, stron: 384
Kontakt
Helion SA
ul. Kościuszki 1c
44-100 Gliwice
tel. 32 230 98 63
e-mail: helion@helion.pl
© Helion 1991–2011
Pierwszy podręcznik tak gruntownie i przejrzyście
wyjaśniający najlepsze praktyki oraz techniki refaktoryzacji!
• Jak identyfikować błędy i problemy z istniejącym kodem?
• Jak poprawiać spójność, czytelność i wydajność kodu?
• Jak przekształcać kod bez ryzyka wprowadzania błędów?
• Jak skutecznie wykorzystywać przekształcenia refaktoryzacyjne?
Jak ryzykowne jest grzebanie w kodzie – wszyscy doskonale wiemy. Im głębiej sięgasz… tym
więcej pojawia się nowych problemów i jeszcze więcej rzeczy wymaga zmian. A nieustanne
„poprawianie” działającego kodu może w końcu doprowadzić do powstania trudno wykrywalnych,
krytycznych błędów. Jednak co zrobić, jeśli "odziedziczymy" nieefektywny, trudny w utrzymaniu
i rozszerzaniu program? Jak poprawić jego strukturalną spójność i wydajność? Wypracowywane
latami przez najlepszych ekspertów techniki refaktoryzacji, czyli ulepszania projektu istniejącego
kodu, są dziś sprawdzonymi rozwiązaniami, zapewniającymi jego trwałą czytelność i możliwość
efektywnego rozwoju. Opracowane głównie na potrzeby frameworków, są obecnie narzędziem
wykorzystywanym dla całego procesu produkcji oprogramowania. Jednak dla wielu programistów
proces refaktoryzacji pozostaje wiedzą tajemną, bo jak dotąd żaden podręcznik nie przedstawił
używanych przy tym technik w praktycznej, łatwej do wykorzystania formie. A przecież
przeprowadzona błędnie lub w zbytnim pośpiechu refaktoryzacja zamiast ulepszenia kodu może
kosztować nas dodatkowe dni lub całe tygodnie stresującej pracy nad programem.
Oto podręcznik, w którym słynny mentor i programistyczny guru Martin Fowler wraz z kilkoma
innymi znanymi programistami podejmują się pierwszego tak gruntownego i przejrzystego
objaśnienia technik związanych ze skutecznym procesem refaktoryzacji. Książka ta przedstawia
zasady i najlepsze praktyki refaktoryzacyjne oraz zawiera wskazówki na temat tego, kiedy i jak
zacząć ingerować w kod. Znajdziesz tu wyczerpujący katalog siedemdziesięciu przekształceń
refaktoryzacyjnych. Każdemu z nich towarzyszą wskazówki dotyczące możliwości wykorzystania,
instrukcja opisująca kolejne kroki oraz przykład. Ten podręcznik pokaże Ci zatem, jak przekształcać
kod w sposób kontrolowany i efektywny, jak refaktoryzować go bez wprowadzania błędów,
konsekwentnie ulepszając jego strukturę, oraz jak skutecznie go testować. Choć przedstawione
w książce przykłady zostały napisane w języku Java, idee te znajdą zastosowanie w każdym innym
języku obiektowym. Ponadto w opisach części przekształceń dodano uwagi związane z ich
stosowaniem w innych językach.
Poznaj sprawdzone techniki ulepszania istniejącego kodu!
Spis tre ci
Sïowo wstÚpne ..........................................................................................................9
Przedmowa ..............................................................................................................11
Czym jest refaktoryzacja? ............................................................................................................................12
Co zawiera ta ksiÈ ka? .................................................................................................................................12
Kto powinien przeczytaÊ tÚ ksiÈ kÚ? .........................................................................................................13
Podstawowe prace wykonane przez innych ...............................................................................................14
PodziÚkowania ..............................................................................................................................................14
1. Refaktoryzacja: pierwszy przykïad ......................................................................17
Punkt wyj cia ................................................................................................................................................17
Pierwszy krok refaktoryzacji .......................................................................................................................22
Dekompozycja i redystrybucja metody statement ....................................................................................22
ZastÈpienie warunkowej logiki wyznaczania ceny polimorfizmem ........................................................39
Podsumowanie ..............................................................................................................................................48
2. Zasady refaktoryzacji .............................................................................................49
Definicja refaktoryzacji ...............................................................................................................................49
Po co refaktoryzowaÊ? .................................................................................................................................50
Kiedy refaktoryzowaÊ? ................................................................................................................................52
Co mam powiedzieÊ kierownikowi? ...........................................................................................................54
Problemy z refaktoryzacjÈ ...........................................................................................................................56
Refaktoryzacja a projektowanie ..................................................................................................................59
Refaktoryzacja a wydajno Ê .........................................................................................................................61
SkÈd siÚ wziÚïa refaktoryzacja? ...................................................................................................................62
3. Brzydkie zapaszki w kodzie ..................................................................................65
Zduplikowany kod .......................................................................................................................................66
Dïuga metoda ...............................................................................................................................................66
Du a klasa .....................................................................................................................................................67
Dïuga lista parametrów ...............................................................................................................................68
Rozbie ne zmiany ........................................................................................................................................68
Fala uderzeniowa .........................................................................................................................................69
Zazdrosne metody ........................................................................................................................................69
Stada danych .................................................................................................................................................69
6
SPIS TRE¥CI
OpÚtanie prymitywami ................................................................................................................................70
Instrukcje switch ..........................................................................................................................................70
Równolegïe hierarchie dziedziczenia .........................................................................................................71
Leniwa klasa .................................................................................................................................................71
Spekulacyjne uogólnienia ............................................................................................................................71
Pole tymczasowe ...........................................................................................................................................72
añcuchy komunikatów ..............................................................................................................................72
Po rednik ......................................................................................................................................................73
Niestosowna blisko Ê ...................................................................................................................................73
Alternatywne klasy z ró nymi interfejsami ...............................................................................................73
Niekompletna klasa biblioteczna ...............................................................................................................73
Klasa opakowujÈca dane ..............................................................................................................................74
Odmowa przyjÚcia spadku ...........................................................................................................................74
Uwagi ..........................................................................................................................................................75
4. Testy .........................................................................................................................77
Zalety samotestujÈcego siÚ kodu .................................................................................................................77
Testy jednostkowe JUnit .............................................................................................................................79
WiÚcej testów ................................................................................................................................................84
5. Katalog przeksztaïceñ refaktoryzacyjnych .........................................................89
Format opisu przeksztaïceñ ........................................................................................................................89
Odnajdywanie odwoïañ ...............................................................................................................................90
Dojrzaïo Ê przeksztaïceñ .............................................................................................................................91
6. Konstrukcja metod .................................................................................................93
Ekstrakcja Metody .......................................................................................................................................94
WchïoniÚcie Metody ..................................................................................................................................100
WchïoniÚcie Zmiennej Tymczasowej ......................................................................................................102
ZastÈpienie Zmiennej Tymczasowej Zapytaniem ..................................................................................103
Wprowadzenie Zmiennej Obja niajÈcej ..................................................................................................107
Podziaï Zmiennej Tymczasowej ...............................................................................................................111
Eliminacja Przypisywania Warto ci Parametrom ..................................................................................114
ZastÈpienie Metody Obiektem .................................................................................................................118
ZastÈpienie Algorytmu ..............................................................................................................................121
7. Przenoszenie skïadowych pomiÚdzy obiektami ...............................................123
Przeniesienie Metody ................................................................................................................................124
Przeniesienie Pola ......................................................................................................................................128
Ekstrakcja Klasy .........................................................................................................................................131
WchïoniÚcie Klasy .....................................................................................................................................135
Ukrycie Delegata ........................................................................................................................................138
UsuniÚcie Po rednika ................................................................................................................................141
Wprowadzenie Obcej Metody ...................................................................................................................143
Wprowadzenie Rozszerzenia Lokalnego .................................................................................................145
8. Organizacja danych ..............................................................................................151
Samoenkapsulacja Pola ..............................................................................................................................153
ZastÈpienie Typu Prostego Obiektem .....................................................................................................156
Zamiana Warto ci na ReferencjÚ ..............................................................................................................159
Zamiana Referencji na Warto Ê ................................................................................................................163
ZastÈpienie Tablicy Obiektem ..................................................................................................................166
SPIS TRE¥CI
7
Duplikacja Obserwowanych Danych .......................................................................................................169
Zamiana Asocjacji Jednokierunkowej na DwukierunkowÈ ...................................................................176
Zamiana Asocjacji Dwukierunkowej na JednokierunkowÈ ...................................................................179
ZastÈpienie Magicznej Liczby StaïÈ SymbolicznÈ ..................................................................................183
Enkapsulacja Pola ......................................................................................................................................184
Enkapsulacja Kolekcji ...............................................................................................................................185
ZastÈpienie Rekordu KlasÈ z Danymi .....................................................................................................193
ZastÈpienie Kodu Typu KlasÈ ..................................................................................................................194
ZastÈpienie Kodu Typu Podklasami ........................................................................................................199
ZastÈpienie Kodu Typu Wzorcem Stan lub Strategia ............................................................................202
ZastÈpienie Podklasy Polami ....................................................................................................................207
9. Upraszczanie wyra eñ warunkowych ................................................................211
Dekompozycja Instrukcji Warunkowej ...................................................................................................212
Scalenie Instrukcji Warunkowej ..............................................................................................................214
Scalenie Zduplikowanych Fragmentów Instrukcji Warunkowej .........................................................217
UsuniÚcie Flagi Kontrolnej ......................................................................................................................219
ZastÈpienie Zagnie d onej Instrukcji Warunkowej InstrukcjÈ Wyj cia ..............................................224
ZastÈpienie Instrukcji Warunkowej Polimorfizmem .............................................................................229
Wprowadzenie Obiektu Pustego ..............................................................................................................233
Wprowadzenie Asercji ...............................................................................................................................240
10. Upraszczanie wywoïañ metod ............................................................................243
Zmiana Nazwy Metody .............................................................................................................................245
Dodanie Parametru ....................................................................................................................................247
UsuniÚcie Parametru .................................................................................................................................249
Rozdzielenie Zapytania i Modyfikacji .....................................................................................................251
Parametryzacja Metody .............................................................................................................................255
ZastÈpienie Parametru Metodami o Ró nych Nazwach ........................................................................257
Przekazanie Caïego Obiektu .....................................................................................................................260
ZastÈpienie Parametru MetodÈ .................................................................................................................263
Wprowadzenie Obiektu Parametrycznego ..............................................................................................266
UsuniÚcie Metody UstawiajÈcej Warto Ê .................................................................................................270
Ukrycie Metody ..........................................................................................................................................273
ZastÈpienie Konstruktora MetodÈ WytwórczÈ .......................................................................................274
Enkapsulacja Rzutowania w Dóï Hierarchii ...........................................................................................278
ZastÈpienie Kodu BïÚdu WyjÈtkiem ........................................................................................................280
ZastÈpienie WyjÈtku Testem ....................................................................................................................285
11. Praca z hierarchiÈ dziedziczenia ........................................................................289
PrzesuniÚcie Pola w GórÚ Hierarchii .......................................................................................................290
PrzesuniÚcie Metody w GórÚ Hierarchii .................................................................................................291
PrzesuniÚcie Ciaïa Konstruktora w GórÚ Hierarchii .............................................................................294
PrzesuniÚcie Metody w Dóï Hierarchii ...................................................................................................297
PrzesuniÚcie Pola w Dóï Hierarchii .........................................................................................................298
Ekstrakcja Podklasy ...................................................................................................................................299
Ekstrakcja Nadklasy ..................................................................................................................................304
Ekstrakcja Interfejsu ..................................................................................................................................308
ZwiniÚcie Hierarchii ..................................................................................................................................311
Utworzenie Metody Szablonowej .............................................................................................................312
ZastÈpienie Dziedziczenia DelegacjÈ .......................................................................................................319
ZastÈpienie Delegacji Dziedziczeniem ....................................................................................................322
Zgłoś jeśli naruszono regulamin