Projekt

Obecné

Profil

Dekompozice » Historie » Verze 15

Premek Brada, 2019-12-19 12:08

1 15 Premek Brada
h1. Dekompozice kódu
2 1 Lukáš Moučka
3 15 Premek Brada
Tento text popisuje prověřenou dobrou techniku "dekompozice kódu".
4 2 Lukáš Moučka
5 15 Premek Brada
6. 11. 2019, Lukáš Moučka, Štěpán Červenka (redakce textu: P.Brada)
6 2 Lukáš Moučka
7
h2. Cílové skupina
8 1 Lukáš Moučka
9 15 Premek Brada
Hlavní cílovou skupinou jsou programátoři. Dekompozice je důležitá i pro vývojové týmy, které společně sdílí kód a spolupracují na něm. Další skupinu tvoří programátoři nebo vývojové týmy, kteří přebírají již hotový nebo rozpracovaný projekt.
10 13 Lukáš Moučka
11 2 Lukáš Moučka
h2. Hlavní cíl
12
13 1 Lukáš Moučka
* rozklad částí kódu do menších logických celků
14 15 Premek Brada
* rozšiřitelnost a přehlednost kódu pomocí rozdělení logiky 
15 8 Lukáš Moučka
16 2 Lukáš Moučka
h2. Dopady
17 1 Lukáš Moučka
18 14 Lukáš Moučka
* efektivnější programování při rozšiřování kódu
19 1 Lukáš Moučka
* jednodušší hledání chyb
20 15 Premek Brada
* podporuje metodu "Rozděl a panuj", která umožňuje řešit složitý problém rozdělením na menší dílčí části (podproblémy).
21 2 Lukáš Moučka
22 1 Lukáš Moučka
h2. Překážky
23 2 Lukáš Moučka
24
* je potřeba zaujmout jiný přístup k programování
25
* vetší důraz je kladen na návrh
26 15 Premek Brada
* programovací jazyk (nemusí dekompozici dostatečně podporovat)
27 3 Lukáš Moučka
* nelze obecně určit, jak má dekompozice vypadat; jedná se o tacitní znalost programátora
28
29
h2. Popis
30
31 15 Premek Brada
Hlavním cílem dekompozice je rozdělení určitého úseku kódu na menší (elementární) části, přičemž elementární část kódu můžeme chápat jako třídu, konstruktor nebo metodu. Každá elementární část by měla obsahovat jen kód, který vykonává operace spjaté s jejím názvem. Pokud např. v metodě s názvem _vypisJmeno()_ budeme mít kód, který zároveň kontroluje, zda se jméno vyskytuje v kalendáři, tato část kódu by už měla v jiné metodě s názvem _jeJmenoVKalendari()_.
32 3 Lukáš Moučka
33 15 Premek Brada
Podobný přístup je možné aplikovat i v případě celých tříd. V situaci, kdy má programátor pocit, že současná třída příliš bobtná a stává se nepřehlednou, je na místě její funkčnost rozdělit na několik menších tříd.
34 9 Lukáš Moučka
35 15 Premek Brada
_Dekompozice_ podporuje metodu "Rozděl a panuj" a tím dovoluje programátorovi řešit relativně složitý problém rozdělením na menší podproblémy. Dílčí části (podproblémy) mohou být lépe řešené za pomoci týmové práce. 
36 9 Lukáš Moučka
37 15 Premek Brada
Při vývoji větších systémů lze všechny atributy nějakého objektu (zjištěné při procesu dekompozice) zaznamenávat do příslušných datových/informačních struktur. Podle těchto atributů následně probíhá nastavení např. _PMD_ testů, které mohou odhalovat úseky kódu vhodné pro dekompozici. Dalším nástrojem pro zlepšení dekompozice je _code review_. V ideálním případě je návrh kódu správný už od jeho počátku a dekompozice se nemusí řešit až při _refaktorování_ kódu. Zpětné modifikace kódu jsou vždy časově/finančně náročné.