Diagram tříd

Obrázek 1 - 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]

Základní definice

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 diagramu

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

Třídy

Příklad třídy v diagramu tříd.
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.


Viditelnost

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
+-#/~
PublicPrivateProtectedDerivedPackage

Vztahy

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

Mohutnost (Multiplicity)

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ů.

00..110..*1..*
Žádná instance (zcela výjimečně)Žádná nebo právě jednaPrá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.

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

Vztahy na úrovni instance

Závislost (Dependency)

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), mohou se změny projevit i na straně druhé (dále jen klient nebo zdroj). Tato asociace je jednosměrná.

Asociace (Association)

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

Asociace
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)

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).

Agregace
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)

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.

Kompozice pro diagram tříd.
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řídy

Dědičnost (Generalization)

Dědičnost
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)

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)

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ý.

Reference

  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. 
  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í odkazy

Média použitá na této stránce

Kompozice diagram tříd.jpg
Autor: Xnavj, Licence: CC BY-SA 4.0
Příklad kompozice pro diagram tříd.
Dědičnost .jpg
Autor: Xnavj, Licence: CC BY-SA 4.0
Příklad dědičnosti v diagramu tříd.
Vztah diagramu tříd..jpg
Autor: Xnavj, Licence: CC BY-SA 4.0
Jednoduchý příklad vztahu pro vysvětlení mohutnosti vztahů.
Asociacy.jpg
Autor: Xnavj, Licence: CC BY-SA 4.0
Jednoduchý příklad vztahu asociace.
Uml diagram.svg
Class diagram of the 13 types of diagrams of the Unified Modelling Language 2.0
Třída v diagramu tříd..jpg
Autor: Xnavj, Licence: CC BY-SA 4.0
Jednoduchá třída, ze kterých se skládá diagram tříd. Tato třída obsahuje název, 4 atributy a 4 metody.
Agregace diagram tříd.jpg
Autor: Xnavj, Licence: CC BY-SA 4.0
Příklad agregace v diagramu tříd.