Skip to content

1 • Diagramy UML

UML, diagramy, schémata programu, datových struktur, databází


Co je UML

UML (Unified Modeling Language) je standardizovaný grafický jazyk pro vizualizaci, návrh a dokumentaci softwarových systémů. Vznikl v 90. letech sloučením tří dřívějších metod (Booch, Rumbaugh OMT, Jacobson OOSE).

K čemu UML slouží

  • Komunikace v týmu mezi vývojáři, analytiky a zákazníkem
  • Dokumentace architektury systému
  • Návrh před samotným kódováním (analýza, plánování)
  • Reverse engineering existujícího kódu do diagramů
  • Code generation z diagramů (vzácné, ale možné)

Rozdělení UML diagramů

Drobnost: zápisky uvádí 6 typů. UML 2.x specifikuje 14 typů diagramů, rozdělených do dvou hlavních kategorií. Pro maturitu nemusíš znát všech 14 detailně, ale mít přehled se vyplatí.

SkupinaÚčelOtázka
Strukturální (7)Statická struktura systémuZ čeho je systém složený?
Behaviorální (7)Dynamické chováníJak systém funguje?

Strukturální diagramy

DiagramCo ukazuje
Class diagramTřídy, atributy, metody, vztahy
Object diagramKonkrétní instance tříd v daný moment
Package diagramLogické skupiny tříd (moduly)
Component diagramSoftwarové komponenty a jejich rozhraní
Composite structureVnitřní struktura komponenty
Deployment diagramFyzické nasazení (servery, hardware)
Profile diagramRozšíření UML pro doménu (málokdy potřeba)

Behaviorální diagramy

DiagramCo ukazuje
Use case diagramCo může uživatel se systémem dělat
Activity diagramTok aktivit (jako vývojový diagram)
State machineStavy objektu a přechody mezi nimi
Sequence diagramČasová posloupnost zpráv mezi objekty
Communication diagramVztahy mezi objekty (bez časové osy)
Timing diagramZměny stavu v čase
Interaction overviewKombinace activity a interakce

V praxi se nejčastěji potkáš s těmito 5: Class, Use Case, Activity, State Machine, Sequence.


Class diagram (diagram tříd)

Nejdůležitější UML diagram. Slouží jako návod pro programátora: musí být úplný a konkrétní.

Anatomie třídy

image.png

Viditelnost (visibility modifiers)

SymbolVýznamJava/C# ekvivalent
+Publicpublic
-Privateprivate
#Protectedprotected
~Packageinternal (C#) / package-private (Java)

Speciální značení

Jak
Abstraktní třídaNázev kurzívou nebo stereotyp <<abstract>>
Statický členPodtržené
RozhraníStereotyp <<interface>> nad názvem
EnumerationStereotyp <<enumeration>>
Abstraktní metodaKurzívou

Příklad: dědičnost a rozhraní

image.png


Object diagram (diagram objektů)

Zachycuje konkrétní instance tříd v jednom okamžiku za běhu systému. Ukazuje skutečné hodnoty atributů, bez metod a bez násobnosti.

image.png

Object diagram je vlastně "snapshot" class diagramu se skutečnými hodnotami.


Package diagram (diagram balíčků)

Sdružuje třídy do logických celků (modulů). Pro přehled architektury velkých systémů.

image.png

Šipka mezi balíčky znamená závislost (balíček A používá balíček B).


Component diagram

Ukazuje softwarové komponenty (knihovny, moduly, služby) a jejich rozhraní. Komponenta je samostatně nasaditelná jednotka.

image.png

= required interface (potřebné), ) = provided interface (poskytované).


Use Case diagram (diagram užití)

Vizualizuje interakce mezi aktérem (uživatelem) a systémem. Odpovídá na otázku: co může uživatel se systémem dělat?

image.png

Klíčové prvky

PrvekVýznam
Actor (postavička)Uživatel nebo externí systém
Use case (elipsa)Akce, kterou aktér s systémem dělá
System boundary (obdélník)Hranice systému
Association (čára)Aktér používá use case
<<include>>Use case A vždy zahrnuje use case B (přihlášení)
<<extend>>Use case B volitelně rozšiřuje A (zapomenuté heslo)
GeneralizationDědičnost mezi use cases nebo aktéry

Praktická pravidla

  • Aktér je role, ne konkrétní osoba
  • Use case popisuje co, ne jak (žádné implementační detaily)
  • Use case má vždy konkrétní výsledek pro aktéra
  • Vícenásobné role: jeden uživatel může být v různých kontextech různý aktér

Activity diagram (diagram aktivit)

Tahle sekce v původních zápiscích chyběla, přitom je to vlastně moderní verze vývojového diagramu a komise se ráda ptá.

Popisuje tok aktivit, podobně jako vývojový diagram. Velmi vhodný pro modelování business procesů a algoritmů.

image.png

Klíčové elementy

TvarVýznam
● (plný kruh)Začátek
⬤ (kruh v kruhu)Konec celého toku
⊗ (kruh s X)Konec jedné větve, ne celého toku
Zaoblený obdélníkKrok aktivity
◇ (kosočtverec)Větvení (if/switch), s [guard]
◇ (kosočtverec)Spojení po větvení
▬ (tlustá čára)Paralelní rozdělení
▬ (tlustá čára)Synchronizace paralelních větví
SloupecKdo akci provádí (oddělení/role)

State machine diagram (stavový diagram)

Popisuje životní cyklus objektu: stavy, ve kterých se může nacházet, a přechody mezi nimi.

image.png

Elementy

ElementVýznam
StateStav, ve kterém objekt je
TransitionPřechod mezi stavy, popsaný událost [guard] / akce
Initial stateStartovní stav
Final stateKonečný stav
Composite stateStav obsahující vnořené substavy
Self-transitionPřechod do sebe (při události provede akci)
Guard [podmínka]Přechod proběhne jen pokud podmínka platí
Entry / exit / doAkce při vstupu / opuštění / průběhu stavu

Sequence diagram (sekvenční diagram)

Zobrazuje časovou posloupnost zpráv mezi objekty. Kdo komu volá a v jakém pořadí. Čas plyne shora dolů.

image.png

Klíčové elementy

ElementVýznam
Lifeline (svislá přerušovaná čára)Časová osa objektu
Activation bar (úzký obdélník na lifeline)Doba, kdy objekt něco vykonává
Synchronous message (plná šipka)Volání, čeká na návrat
Asynchronous message (otevřená šipka)Volání, nečeká
Return message (přerušovaná šipka)Návratová hodnota
Self-messageVolání na sebe
Object creationŠipka přímo na objekt
Object destruction× na konci lifeline

Combined fragments (rámečky)

Pro řízení toku v sequence diagramu:

FragmentCo dělá
altAlternativa (if-else)
optVolitelná akce (if)
loopCyklus
parParalelní vykonání
breakPředčasné ukončení
criticalKritická sekce

Communication diagram (komunikační diagram)

Alternativa k sequence diagramu. Zaměřuje se na vztahy mezi objekty, ne na časovou osu. Zprávy jsou číslovány.

image.png

Sequence i Communication diagram zobrazují stejné informace, jen z jiného úhlu. Lze mezi nimi automaticky konvertovat.


Vztahy v UML class diagramu

VztahZnačkaVýznam
Asociace───────Základní vztah, objekty si o sobě "vědí"
Agregace───────◇Celek-část, část přežije celek
Kompozice───────◆Silná vazba, část bez celku nedává smysl
Generalizace───────▷Dědičnost, šipka míří na rodiče
Realizace- - - -▷Implementace rozhraní
Závislost- - - -▶A používá B, ale neukládá si referenci

Agregace vs Kompozice (klasický chyták)

AgregaceKompozice
Značka─◇ (prázdný kosočtverec)─◆ (plný kosočtverec)
Životní cyklusČást přežije celekČást umírá s celkem
PříkladTým ◇ Hráč (hráč přežije tým)Dům ◆ Pokoj (pokoj neexistuje bez domu)
Jiný příkladKnihovna ◇ KnihaAuto ◆ Motor
SdíleníČást může být v víc celcíchČást v jednom celku

Asociace s rolemi

        zaměstnává
[Firma] ◆──────────▷ [Zaměstnanec]
        zaměstnavatel   zaměstnanec
        1               *

Role popisují, jakou funkci hraje objekt ve vztahu.


Multiplicita (násobnost)

ZápisVýznam
1Právě jeden
0..1Žádný nebo jeden (nepovinný)
* nebo 0..*Libovolný počet (i 0)
1..*Alespoň jeden
2..5Od dvou do pěti
nKonkrétní počet (např. 8 rohů kostky)
[Student] 1 ──── 1..* [Kurz]

Student se může zapsat na 1 a více kurzů, kurz má 1 nebo více studentů.

[Auto] 1 ──── 4 [Kolo]

Auto má vždy přesně 4 kola.

[Osoba] 0..1 ──── 0..* [Telefon]

Telefon má nula nebo jednoho majitele, osoba může mít libovolně mnoho telefonů.


UML pro datové struktury

UML class diagram se používá i pro modelování datových struktur jako spojový seznam, strom, hashmapa.

Spojový seznam (linked list)

┌───────────────┐         ┌───────────────┐         ┌───────────────┐
│     Node      │  next   │     Node      │  next   │     Node      │
├───────────────┤────────▷├───────────────┤────────▷├───────────────┤
│ - value: int  │ 0..1    │ - value: int  │ 0..1    │ - value: int  │──▷ null
│ - next: Node  │         │ - next: Node  │         │ - next: Node  │
└───────────────┘         └───────────────┘         └───────────────┘

Binární strom

┌──────────────────┐
│   TreeNode       │
├──────────────────┤   left    ┌──────────────────┐
│ - value: int     │──────────▷│   TreeNode       │ (recursive)
│ - left: TreeNode │          │                  │
│ - right: TreeNode│  right   ├──────────────────┤
└──────────────────┘─────────▷│ - value: int     │
                              │ ...              │
                              └──────────────────┘

UML vs ER pro databáze

ER diagram

image.png

Vztahy v ER

KardinalitaVýznam
1:1Jeden má jednoho (student má jeden pas)
1:NJeden má víc (učitel má víc kurzů)
N:MVíce má víc (studenti se zapisují na víc kurzů)

Vazební tabulka pro N:M

STUDENT (id PK, jmeno, email)
KURZ (id PK, nazev, kredity)
ZAPIS (student_id FK, kurz_id FK, datum_zapisu)   ← vazební tabulka

V relačních DB se vztah N:M nedá uložit přímo, vždy potřebuje vazební tabulku s dvojicí cizích klíčů.


Nástroje pro tvorbu UML

NástrojCharakter
Draw.io / diagrams.netZdarma, browser, jednoduchý
PlantUMLText-to-diagram, perfektní pro git verzování
MermaidMarkdown-friendly, podpora v GitHubu, Notion
ModelioOpen source, plnohodnotný UML editor
LucidchartOnline, kolaborace v reálném čase
Visual ParadigmProfesionální, placené
Enterprise ArchitectEnterprise standard pro velké projekty
StarUMLLehký desktop editor
ChatGPT ImageProstě mu řekni, ať ti to vygeneruje. Lol.

Z těchto pár řádků PlantUML vygeneruje hotový diagram. Skvělé pro dokumentaci, kterou chceš verzovat v gitu.


Rychlý tahák

PojemKlíčová fakta
UMLStandardizovaný grafický jazyk pro návrh softwaru, UML 2.5.1
OMGObject Management Group, standardizuje UML
14 typů diagramů7 strukturálních + 7 behaviorálních
StrukturálníClass, Object, Package, Component, Composite, Deployment, Profile
BehaviorálníUse Case, Activity, State Machine, Sequence, Communication, Timing, Interaction Overview
Class diagramTřídy + atributy + metody + vztahy, nejdůležitější
Visibility+ public, - private, # protected, ~ package
Object diagramKonkrétní instance s hodnotami, "snapshot"
Use CaseAktér + akce, co může uživatel se systémem dělat
<<include>>Use case A vždy zahrnuje B
<<extend>>Use case B volitelně rozšiřuje A
Activity diagramTok aktivit, jako vývojový diagram, kosočtverec = if
DecisionKosočtverec v activity, s [guard] podmínkou
Fork / JoinParalelní rozdělení a spojení
State diagramStavy objektu a přechody mezi nimi
Sequence diagramČasová posloupnost zpráv shora dolů
LifelineSvislá přerušovaná čára objektu v sequence
Combined fragmentsalt, opt, loop, par v sequence
AsociacePlná čára, základní vztah
AgregaceČást přežije celek
KompoziceČást umírá s celkem
GeneralizaceDědičnost, šipka na rodiče
Realizace ┄▷Implementace rozhraní
Multiplicita1, *, 0..1, 1..*, 2..5
ER diagramNENÍ součástí UML, samostatná notace (Chen 1976)
Crow's FootNejpopulárnější DB notace dnes
N:M v DBVyžaduje vazební tabulku s FK na obě entity

Tipy pro ústní zkoušku

Jak začít

"UML je standardizovaný grafický jazyk pro vizualizaci a návrh softwaru, spravovaný organizací OMG. Definuje 14 typů diagramů ve dvou kategoriích: strukturální popisují, z čeho je systém složený, behaviorální popisují, jak funguje. V praxi se používá kombinace 4-5 nejčastějších diagramů: Class, Use Case, Activity, State Machine, Sequence."

Co komise typicky chce slyšet

  • Rozdělení strukturální vs behaviorální s ukázkou diagramů v každé kategorii.
  • Class diagram podrobně: třída, atributy, metody, viditelnost (+/-/#), vztahy.
  • Rozdíl agregace vs kompozice s konkrétním příkladem.
  • Use Case diagram: aktér, system boundary, include/extend.
  • Multiplicita se zápisy a praktickou ukázkou.

Doplňky, které komisi potěší

  • OMG jako standardizační organizace, UML 2.5.1.
  • Activity diagram s decision (kosočtverec) a swimlanes.
  • State diagram s guards a self-transitions.
  • Sequence diagram s combined fragments (alt, opt, loop).
  • PlantUML / Mermaid jako moderní text-based UML.
  • ER vs UML rozlišení, Crow's Foot notace.