Refaktorování: Porovnání verzí

Smazaný obsah Přidaný obsah
pracuje se
základní úpravy, vrácení iw a kategorie
Řádek 1:
{{Pracuje se}}
== '''Refaktoring obecně''' ==
 
'''Refaktorování''' je disciplinovaný proces provádění změn v softwarovém systému takovým způsobem, že nemají vliv na vnější chování kódu, ale vylepšují jeho vnitřní strukturu s minimálním rizikem vnášení chyb. Při refaktoringu provádíme malé až primitivní změny, ale celkový efekt je velký a to v podobě čistšího, průhlednější a čitelnější kódu, kód se také lépe udržuje a rozšiřuje. Zlepšuje se také celková kvalita kódu a architektura, snižuje se počet chyb a tím i rychlost vývoje programu. Refaktoring nám pomáhá pochopit a více si ujasnit kód, což je vhodné zejména, pokud upravujeme kód po někom jiném.
<br>Při refaktoringu provádíme malé až primitivní změny, ale celkový efekt je velký a to v podobě čistšího, průhlednější a čitelnější kódu, kód se také lépe udržuje a rozšiřuje. Zlepšuje se také celková kvalita kódu a architektura, snižuje se počet chyb a tím i rychlost vývoje programu. Refaktoring nám pomáhá pochopit a více si ujasnit kód, což je vhodné zejména, pokud upravujeme kód po někom jiném.
 
== '''Vznik''' ==
 
== '''Vznik''' ==
Refaktoring se začal používat mezi programátory ve smalltalku, což je čistě objektový programovací jazyk, kde existoval první nástroj na refaktoring, později, když již refaktoring byl v povědomí některých programátorů a metody refaktorování jimi byly dostatečně prověřeny, napsal Martin Fowler za velké pomoci těchto zkušených programátorů knihu Refactoring: Improving the Design of Existing Code, která je dodnes využívána jako základní příručka k poznání a naučení se správného refaktorování, což je dnes neodmyslitelná metoda moderního programování a tím se mohl refaktoring rozšířit do povědomí všech programátorů.
 
== '''Jak správně refaktorovat''' ==
 
== '''Jak správně refaktorovat''' ==
 
Pokud refaktoring zcela neovládáme, může být velice riskantní, jelikož upravujeme funkční kód a touto úpravou si do kódu můžeme zavést velice záludné chyby a program již nemusí být funkční. Proto mezi hlavní zásadu patří mít před samotným refaktorováním připravenou dobrou sadu testů, kterou spustíme po každé změně.
<br>Další důležitá zásada je refaktorovat po malých krocích a to neustále a ihned testovat, zda nám někde nevznikla chyba. Většina programátorů provádí refaktoring, aniž by o něm věděla, jelikož jedna z nejdůležitějších zásad programátora je, aby ve svém kódu neměl duplicity. Když nějakou duplicitu objeví, snaží se jí zbavit a to většinou nevědomky refaktoringem a to konkrétně postupem vyjmout metodu.
 
<br>Další důležitá zásada je refaktorovat po malých krocích a to neustále a ihned testovat, zda nám někde nevznikla chyba. Většina programátorů provádí refaktoring, aniž by o něm věděla, jelikož jedna z nejdůležitějších zásad programátora je, aby ve svém kódu neměl duplicity. Když nějakou duplicitu objeví, snaží se jí zbavit a to většinou nevědomky refaktoringem a to konkrétně postupem vyjmout metodu.
== '''Kdy refaktorovat''' ==
 
== '''Kdy refaktorovat''' ==
Martin Fowler ve své knize Refaktoring uvádí 22 takzvaných pachů v kódu, které jsou zvěstí toho, že bychom kód měli začít refaktorovat a zároveň uvádí, jaké techniky jsou pro který pach třeba. To ale neznamená, že to tak vždy musí být, samozdřejmě vždy závisí na konkrétní situaci. Já zde nastíním pouze některé pachy v kódu, ty nejzákladnější a většinou i nejčastější, ale pokud se o nich chcete dozvědět více, vřele doporučuji knihu Refaktoring.
* Duplicitní kód – pokud najdeme v kódu na více místech stejnou strukturu
* Dlouhá metoda – záleží na každém, kolik řádků už je pro něj dlouhá metoda, pokud takovou najdeme, většinou se v takové metodě řeší více problémů najednou a měli bychom jí rozdělit na metody menší, které řeší právě jeden problém, poté je kód čitelnější
* Velká třída – pokud se třída snaží dělat více věcí najednou, není to z pohledu objektově orientovaného programování dobře, jelikož každá třída by správně měla řešit právě jeden problém, tudíž řešením je rozdělit třídu na více tříd
* Dlouhý seznam parametrů – metody s dlouhým počtem parametrů jsou většinou nesrozumitelné, pokud tyto předávané parametry obsahuje nějaký objekt, je řešením předat jako parametr tento objekt
* Příkaz switch – měli bychom ho řešit pomocí polymorfie a vyčlenit ho do samostatné metody
* Komentáře – pokud máme tendenci komentovat uvnitř metody náš kód je většinou lepší tento kód vyčlenit do samostatné metody a pomocí vhodného názvu této metody nám odpadne nutnost komentáře
Další důvody, kdy začít s refaktoringem: pokud máme v programu složité struktury podmínek, měli bychom refaktorovat, stejně tak jako bychom měli refaktorovat vždy před přidáním nějaké nové funkcionality. Pokud nemůžeme najít chybu v kódu, je to další důvod, proč bychom měli refaktorovat. A v neposlední řadě je tu zásada tří - refaktorovat místo třetího opakovaní - pravidlo Dona Robertsa.
 
== '''Zásady refaktoringu''' ==
 
== '''Zásady refaktoringu''' ==
 
Při refaktorování nikdy nesmíme zapomenout na metaforu dvou klobouků od Kenta Becka: v jednom klobouku přidáváme funkcionalitu a neměníme strukturu, v druhém klobouku měníme strukturu a nepřidáváme funkcionalitu. Můžeme je měnit klidně každých 5 minut, ale vždy musíme vědět, co děláme, tedy jaký klobouk máme na hlavě a nemíchat přidávání funkcionality s refaktoringem.
 
== '''Refaktoring obecně'''a vedoucí projektu ==
 
== '''Refaktoring a vedoucí projektu''' ==
 
Obecně refaktoring nemají rádi vedoucí projektů, protože může trvat velice dlouho, projekt zbrzdit a nepřinést na první pohled žádný viditelný výsledek. Pokud je i váš vedoucí projektu proti refaktoringu, je třeba vyzdvihnout především jeho pozitiva mimo jiné i to, že náklady na budoucí provoz se sníží, stejně tak jako doba potřebná k přidání nové funkčnosti a těmito argumenty se ho snažit přesvědčit. Myslím ale, že v dnešní době, kdy refaktoring je již hodně populární a především známý s ním nebude u vedoucích projektů problém.
 
== '''Techniky refaktoringu''' ==
 
== '''Techniky refaktoringu''' ==
 
Zde uvádím výčet technik refaktoringu, které jsou detailně popsané v knize Refaktoring.
 
'''Úpravy metod'''
 
*nahradit algoritmus
*nahradit dočasnou proměnnou dotazem
Řádek 53 ⟶ 41:
*vyjmout metodu – z dlouhé metody vyjmeme část kódu, který dáme do nové metody
*zavést vysvětlující proměnnou
 
'''Přesouvání prvků mezi objekty'''
*odstranit prostředníka
*přesunout metodu a přesunout položku – přesun do vhodné třídy
Řádek 62 ⟶ 51:
*zavést místní rozšíření
 
'''Organizace dat'''
*nahradit datovou položku objektem
*nahradit pole objektem
Řádek 71 ⟶ 60:
*zavést předpoklad
 
'''Generalizace'''
*nahradit dědičnost delegováním
*nahradit delegování dědičností
Řádek 82 ⟶ 71:
*vytvořit šablonovou metodu
*zrušit hierarchii
 
'''Zjednodušení volání metod'''
*nahradit chybový kód výjimkou
Řádek 99 ⟶ 89:
*zavést objekt pro parametry
 
'''Velké programování'''
*roztrhnout dědičnost
*převést procedurální návrh do objektů
Řádek 105 ⟶ 95:
*oddělit datový model od prezentace
 
'''Ostatní techniky'''
*duplikovat sledovaná data
*nahradit kód typu podtřídami
Řádek 118 ⟶ 108:
 
 
== '''Refaktoring a návrhové vzory''' ==
 
Existuje zde vazba mezi refaktoringem a návrhovými vzory a to taková, že vzory vlastně popisují definovaný cíl a naopak refaktorování popisuje způsob jak se k tomuto cíli dostat. Pokud se podíváte na jednotlivé techniky, poznáte již z jejich jména, že mají co dočinění s návrhovými vzory, viz vytvořit šablonovou metodu, zavést objekt null, nahradit konstruktor tovární metodou nebo nahradit kód typu stavem nebo strategií.
 
 
== '''Podpora refaktoringu''' ==
 
Některé postupy při refaktorování je možné přesně definovat a zcela automatizovat a dnes je již v moderních vývojových prostředích jako je Eclipse a další nabízena podpora při refaktoringu. Technika vyjmout metodu z dlouhé metody již tedy není vůbec složitý a prakticky u něj nemusíte ani moc přemýšlet, udělá jej za vás program. Někteří si při psaná kódu ani neuvědomují, že např. změna názvu proměnné je také refaktoring, který za nás provede program, avšak dříve tato změna byla velmi náročná.
 
== Externí odkazy ==
<br>*[http://refactoring.com/] - Stránka Martina Fowlera o refaktoringu v angličtině
<br>*Refaktoring: zlepšení existujícího kódu - Martin Fowler, nakladatelství Grada, rok vydání 2003, ISBN: 80-247-0299-1
 
[[Kategorie:Programování]]
== '''Zdroje''' ==
 
[[ca:Refacció]]
[http://en.wikipedia.org/wiki/Refactoring] - Informace o refaktoringu v angličtině
[[da:Refactoring]]
<br>[http://refactoring.com/] - Stránka Martina Fowlera o refaktoringu v angličtině
[[de:Refactoring]]
<br>Refaktoring: zlepšení existujícího kódu - Martin Fowler, nakladatelství Grada, rok vydání 2003, ISBN: 80-247-0299-1
[[en:Code refactoring]]
[[es:Refactorización]]
[[fi:Refaktorointi]]
[[fr:Refactorisation]]
[[gl:Refactorización]]
[[it:Refactoring]]
[[ja:リファクタリング (プログラミング)]]
[[ko:리팩토링]]
[[lt:Pertvarkymas (programavimas)]]
[[nl:Refactoren]]
[[pl:Refaktoryzacja]]
[[pt:Refatoração]]
[[ru:Рефакторинг]]
[[sv:Omstrukturering av kod]]
[[uk:Рефакторинг]]
[[vi:Cải tiến mã nguồn]]
[[zh:代码重构]]