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
[editovat | editovat zdroj]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
[editovat | editovat zdroj]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
[editovat | editovat zdroj]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
[editovat | editovat zdroj]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]
+ | - | # | / | ~ |
---|---|---|---|---|
Public | Private | Protected | Derived | Package |
Vztahy
[editovat | editovat zdroj]Nedílnou součástí jsou jednotlivé vztahy dle UML, které propojují jednotlivé instance (třídy) v diagramu.
Mohutnost (Multiplicity)
[editovat | editovat zdroj]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.
Vztahy na úrovni instance
[editovat | editovat zdroj]Závislost (Dependency)
[editovat | editovat zdroj]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)
[editovat | editovat zdroj]Dalším ze vztahů je asociace. Ta představuje statický vztah sdílené mezi objekty dvou tříd.
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 | editovat zdroj]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).
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 | editovat zdroj]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.
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
[editovat | editovat zdroj]Dědičnost (Generalization)
[editovat | editovat zdroj]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 | editovat zdroj]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 | editovat zdroj]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
[editovat | editovat zdroj]- ↑ 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.
- ↑ www.methodsandtools.com [online]. www.methodsandtools.com [cit. 2016-06-10]. Dostupné online.
- ↑ FAKHROUTDINOV, Kirill. www.uml-diagrams.org [online]. www.uml-diagrams.org [cit. 2016-06-10]. Dostupné online.
- ↑ a b c dudka.cz [online]. dudka.cz [cit. 2016-06-10]. Dostupné online.
Externí odkazy
[editovat | editovat zdroj]Obrázky, zvuky či videa k tématu Diagram tříd na Wikimedia Commons