Diagram tříd

Diagram tříd popisuje statickou strukturu systému, znázorňuje datové struktury a operace u objektů a souvislosti mezi objekty. Znázorňuje datový model systému od konceptuální úrovně až po implementaci. Datové struktury zařazuje do tříd a zobrazuje vztahy těchto tříd.[1]

Obrázek 1 - Diagram tříd

Základní definiceEditovat

Patří do skupiny UML diagramů a je hlavním stavebním kamenem objektově orientovaného modelování. Používá se jak pro běžné koncepční modelování, tak i k detailnímu modelování či převodu modelů do programového kódu. Diagram tříd může být také použit pro modelování dat.[2]

Části diagramuEditovat

Diagram tříd kromě datové struktury obsahuje třídy systému, jejich atributy, metody či operace a také vztahy mezi jednotlivými objekty.

TřídyEditovat

 
Obrázek 2 - Jednoduchá třída, ze kterých se skládá diagram tříd.

Základním objektem diagramu tříd jsou pochopitelně třídy. Ty jsou většinou zastoupeny podobnými "boxy", jako jsou na obrázku. Třídy jsou rozděleny do 3 základních částí. Jsou to tyto:

  • V horní části třídy je tučným písmem název celé třídy. Ten by měl začínat velkým písmenem. Pokud by byl název víceslovný je vhodné použít CamelCase.
  • Ve střední části jsou atributy třídy. Ty začínají dle standardů malým písmenem. Opět je zde pří víceslovných názvech použit CamelCase. Atributy jsou vlastně vlastnosti, které tato třída obsahuje. Na vzorovém příkladu na obrázku vlevo jsou to pro entitu zákazník vlastnosti jako adresa, telefon atd.
  • Ve spodní části třídy jsou obsaženy metody a operace, které může tato třída provést. Stejně jako u atributů začínají malým písmenem, podléhají CamelCase a jsou na konci označeny ještě závorkami.


ViditelnostEditovat

Další součástí tříd jsou také symboly, které označují viditelnost jednotlivých částí diagramu a tříd. V příkladu na obrázku 2 jsou u atributů znaky "-" a u metod znaky "+". Ty zde nejsou náhodně. Označují viditelnost jednotlivých částí diagramu. Pro přehled, co který znak znamená, poslouží následující tabulka.[3]

Znaky označující viditelnost
+ - # / ~
Public Private Protected Derived Package

VztahyEditovat

Nedílnou součástí jsou jednotlivé vztahy dle UML, které propojují jednotlivé instance (třídy) v diagramu.

Mohutnost (Multiplicity)Editovat

Než přejdeme k jednotlivým vztahům mezi instancemi diagramu, je třeba probrat mohutnost vztahů. Ve zkratce můžeme použít tuto definici. Mohutnost vztahu udává, kolik instancí jedné třídy může být svázáno s instancí třídy druhé.[4]

Pro upřesnění si uvedeme pár příkladů.

0 0..1 1 0..* 1..*
Žádná instance (zcela výjimečně) Žádná nebo právě jedna Právě jedna instance Žádná nebo více instancí Jedna nebo více instancí

Abychom shrnuli tuto část. Na obrázku 3 je zobrazen jednoduchý vztah mezi instacemi A a B. Podle definice v této kapitole je tedy jasné, že instance ze třídy A může být svázáno s jednou nebo více instacemi ze třídy B.

 
Obrázek 3 - Jednoduchý příklad vztahu pro vysvětlení mohutnosti vztahů.

Vztahy na úrovni instanceEditovat

Závislost (Dependency)Editovat

Závislost je vztah mezi závislými a nezávislými prvky modelu. Je vytvořena mezi dvěma prvky. Pokud dojde ke změně definice jednoho prvku (server nebo cíl) můžou se změny projevit i na straně druhé (dále jen klient nebo zdroj). Tato asociace je jednosměrná.

Asociace (Association)Editovat

Dalším ze vztahů je asociace. Ta představuje statický vztah sdílené mezi objekty dvou tříd.

 
Obrázek 4 - Jednoduchý příklad asociačního vztahu.

Nejčastějším typem asociace je binární asociace (se dvěma konci). Ta je obvykle reprezentována jako čára. Asociace však může propojit libovolný počet tříd. Asociace se třemi odkazy se nazývá ternární asociace. Samotná asociace může být v grafickém UML vzhledu pojmenována, mít přiřazena jména rolí, mohutnost, viditelnost či jiné další vlastnosti.

Existují čtyři různé typy sdružení: obousměrný, jednosměrný, agregace (zahrnuje agregaci složení) a reflexivní. Obousměrné i jednosměrné sdružení jsou nejobvyklejší. Například, třída, je spojena s rovinou třídy obousměrně.

Agregace (Aggregation)Editovat

Agregace vyjadřuje slabší vztah mezi objektem a jeho částmi. Objektu reprezentujícímu celek se říká agregační (seskupený) objekt, jeho částem pak konstituční objekty (konstituenty).

 
Obrázek 5 - Příklad agregace v diagramu tříd.

Vlastnosti agregace jsou:

  • Seskupený objekt může existovat bez svých konstitučních objektů.
  • Konstituent může být součástí více seskupení.[4]

V UML jazyce je graficky znázorněna jako nevyplněný diamant.

Příklad: Knihovna má studenty a knihy. Student však může existovat bez knihovny. Vztah mezi studentem a knihovnou je tedy agregace.

Kompozice, složení (Composition)Editovat

Kompozice vyjadřuje silnější vztah mezi objektem a jeho částmi. Objektu reprezentujícímu celek se říká kompozitní (složený) objekt, jeho částem pak komponentní (složkové) objekty.

 
Obrázek 6 - Příklad kompozice pro diagram tříd.

Vlastnosti kompozice jsou:

  • Složený objekt nemůže existovat bez svých komponent.
  • Komponentní objekt může být součástí pouze jedné kompozice.[4]

V UML jazyce je graficky znázorněna vyplněným diamantem.

Příklad: Faktura se skládá z jedné nebo více položek. V okamžiku, kdy faktura z nějakého důvodu zanikne, jsou nám k ničemu i položky pro tuto fakturu.

Vztahy na úrovni třídyEditovat

Dědičnost (Generalization)Editovat

 
Obrázek 7 - Příklad dědičnosti v diagramu tříd.

Dědičnost je hierarchický vztah mezi třídami. Jeden ze dvou příbuzných tříd (podtříd), je považován za specializovaný druh druhého (super typu). V praxi to znamená, že každý případ potomka je také instancí rodičovské třídy.

V UML jazyce je grafický symbol pro dědičnost trojúhelník.

Jako vysvětlující příklad použijeme jednoduchý příklad z biologie.

Lidé jsou podtřídou opic, Ty jsou zase podtřídou savců atd. To znamená, že všechny opice jsou savci, mají jejich vlastnosti atd. Jsou zvláštní podtřídou savců a mají své specifické atributy, ale ty základní, dědí od své rodičovské třídy, tedy savců.

Realizace (Realization)Editovat

Realizace je vztah mezi zdrojovou (mateřskou) třídou a její realizací dceřinou třídou. Nejčastěji je to vztah mezi rozhraním a třídou. Ve chvíli kdy jsou tyto 2 třídy propojeny vztahem realizace, označujeme tak fakt, že třída implementuje všechny operace z daného rozhraní.

Realizace může však být také vztah mezi třídami, rozhraní, komponenty a balíčky, které spojuje klientský prvek s prvkem dodavatelským.

Závislost (Dependency)Editovat

Závislost je slabší forma vztahu, která naznačuje, že jedna třída závisí na jiné, protože používá v určitém okamžiku v čase parametr, proměnnou nebo místní proměnnou závislé třídy. Někdy je vztah mezi dvěma třídami velmi slabý.

ReferenceEditovat

  1. KUČEROVÁ, Helena. Diagram tříd [online]. Praha: Vyšší odborná škola informačních služeb, 2007-03-31 [cit. 2010-12-07]. Dostupné v archivu pořízeném dne 2010-09-27. (česky) 
  2. www.methodsandtools.com [online]. www.methodsandtools.com [cit. 2016-06-10]. Dostupné online. 
  3. FAKHROUTDINOV, Kirill. www.uml-diagrams.org [online]. www.uml-diagrams.org [cit. 2016-06-10]. Dostupné online. 
  4. a b c dudka.cz [online]. dudka.cz [cit. 2016-06-10]. Dostupné online. 

Externí odkazyEditovat