Soudržnost (informatika): Porovnání verzí

Smazaný obsah Přidaný obsah
m Robot: -zastaralá značka HTML; kosmetické úpravy
Řádek 1:
'''Soudržnost''' je v [[informatika|informatice]] způsob pro měření, jak vysoce je daný kus kódu zaměřený na specifickou funkcionalitu. Jedním ze základních pravidel moderního programování je tuto soudržnost maximalizovat. Cílem tohoto pravidla tedy je, aby každá vytvořená metoda dělala pouze takové operace, které směřují k předem danému výsledku metody, nikoliv však operace, které by měly být v jiné metodě či třídě. Čím více je vytvořený kód soudržný, tím lépe se nám s ním pracuje, výsledná [[Aplikační_softwareAplikační software|aplikace]] je více flexibilní a kdokoliv po nás bude mít za úkol aplikaci rozšířit, bude pro něj snazší pochopit jednotlivé metody aplikace.
 
== Druhy soudržnosti ==
Řádek 22:
Jednoduchou ukázkou málo soudržného kódu může být metoda report(), která zpracovává data a dále je exportuje do výsledného formátu, který je uložen na disk počítače. Už z tohoto popisu je možné vidět, že metoda má na starosti více rozličných úkolů, než jen jeden specifický. Taková metoda by mohla vypadat následovně:
 
<sourcesyntaxhighlight lang="java">
public void report(ReportData data, boolean save, String path) {
String nameLine = data.getTitleBefore() + " " + data.getFirstName()
Řádek 49:
}
}
</syntaxhighlight>
</source>
 
Jak již bylo řečeno, tato metoda není soudržná. Na jednom místě se řeší vytvoření výsledné podoby dat pro report, tvorba struktury souboru a následně jeho vytvoření a uložení. Někomu se takováto metoda může zdát užitečná, přece jen umí hodně věcí, ale už podle názvu metody by obsah měl vypadat jinak. Názvy metod jsou velmi důležitým faktorem v soudržnosti. Předchozí metoda se jmenuje „report“, takže by kdokoliv mohl předpokládat, že metoda bude pouze zobrazovat výsledky. Místo toho ale metoda dělá spoustu jiných věcí. Další chybou v příkladě je delegování kontroly směrem dolů. Až uvnitř metody se řeší, zda bude výsledek uložen nebo jen zobrazen uživateli. Takováto rozhodnutí by měla být prováděna o stupeň výš, ne být součástí jedné obecné metody. Jak tedy z takovéto nesoudržné metody udělat soudržnou? Řešení je jednoduché – rozdělit metodu na nezávislé metody, které budou odpovědné pouze za jednu specifickou funkci. V našem případě bychom mohli vytvořit metody processData(), createXMLStructure(), saveFile() a printFile(). Každá z těchto metod dělá přesně to, co se od ní očekává a co koresponduje s jejím názvem.
Řádek 56:
V předchozím příkladě je ukázáno, jak by to při tvorbě metod vypadat nemělo a je nastíněno správné řešení. Může ale dojít také k situaci, kdy třída obsahuje sice samé vysoce soudržné metody, ale je jich příliš mnoho a tím se stává nepoužitelnou. Při navrhování metod by se měly dodržovat dvě základní pravidla – maximalizovat soudržnost a nepředávat kontrolu metodám na nižším stupni. Někdy to však není možné a v těchto případech je občas nutné jedno z pravidel porušit, běžné je však i porušení obou pravidel. Dobrým příkladem pro tento případ může být metoda pro zpracování stisku tlačítka. Metoda jako parametr dostane tlačítko, které bylo stisknuto a to poté zpracuje. Pokud takovouto metodu implementujeme přes switch(key) a dále pro každé tlačítko máme case příkaz, takováto metoda je jednoduše čitelná, stejně jako v případě, kde bychom měli pro všechna tlačítka vlastní metody handleAButton() atd.
 
<sourcesyntaxhighlight lang="java">
public void keyPressed(KeyEvent ke){
switch (ke.getKeyCode()) {
Řádek 70:
}
}
</syntaxhighlight>
</source>
 
Na tomto příkladu je vidět, že dodržovat pravidla soudržnosti je dobré, ale programátor by se především měl řídit zdravým rozumem, jinak se může jednoduše stát, že kvůli soudržnosti nám vzniknou třídy s desítkami metod, což ne vždy vede k nejlepším výsledkům.