NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.

Lekce 4 - UML - Doménový model

V předešlém cvičení, Řešené úlohy k 3. lekci UML, jsme si procvičili nabyté zkušenosti z předchozích lekcí.

Dostáváme se k tzv. doménovému modelu. Doménový model se vytváří spolu s Use Case diagramem v počáteční fázi vývoje softwaru. Jedná se o formu class diagramu, tedy diagramu tříd. Asi nemusím zmiňovat, že systém bude programován objektově a proto bude i tak navrhován. Základní entitou je třída.

Třídy v doménovém modelu jsou však značně zjednodušené, neobsahují metody a mají pouze důležité atributy. Názvy tříd, atributů a další identifikátory můžeme psát s diakritikou. Doménový model je tedy jakýsi náčrt základních entit systému a vztahů mezi nimi. Je platformově nezávislý (není určen pro konkrétní programovací jazyk) a atributy nemají datové typy.

Při tvorbě doménového modelu vycházíme ze zadání klienta. Z něj identifikujeme klíčové entity a vztahy mezi nimi. Tyto entity zakreslíme do modelu jako třídy.

Grafická notace třídy je obdélník rozdělený vodorovně na 3 části.

Notace třídy v doménovém diagramu - UML

V první je zapsané jméno třídy, v druhé jsou její atributy a ve třetí části nalezneme metody. Pro doménový model budeme uvádět jen zjednodušenou notaci s názvem třídy a atributy. Kompletní třídu si představíme příště, u Class diagramu.

Třídy jsou mezi sebou propojeny pomocí vztahů.

Vztahy

UML nabízí několik druhů vztahů, ty základní si vyjmenujeme.

Asociace (Association)

Asociace určuje základní vztah mezi dvěma entitami. Ty mohou existovat nezávisle na sobě. Zakreslujeme ji jako jednoduchou plnou čáru.

Příklad jednoduché asociace mezi 2 entitami může být Auto a Řidič. Vztah by se znázornil takto:

UML notace vztahu asociace mezi třídami v doménovém diagramu - UML

Jako výchozí je směr na obě strany, tedy že první entita má odkaz na druhou, a naopak druhá na první. Toto chování můžeme změnit přidáním jednoduché šipky, která směr specifikuje a způsobí, že odkaz si uchovává pouze ta instance, ze které směřuje šipka.

Je možné vytvořit asociaci i mezi 3 třídami, ale tím se nebudeme zabývat.

Agregace (Aggregation)

Agregace reprezentuje vztah typu celek - část. Zakreslujeme ji jako plnou čáru, zakončenou na jedné straně prázdným kosočtvercem. Ten je umístěn u té entity, která reprezentuje celek (např. sekce s články). Z hlediska implementace je to tak entita, která drží kolekci prvků. Entita reprezentující část může existovat sama o sobě a být součástí i jiných kolekcí.

Příkladem agregace může být již zmíněná sekce, obsahující články. Čísla na konci vazby znamenají tzv. multiplicitu, přesněji, že sekce obsahuje libovolný počet článků a článek patří alespoň do 1 sekce.

UML notace vztahu agregace mezi třídami v doménovém diagramu - UML

Multiplicitě se ještě budeme dále věnovat.

Kompozice (Composition)

Kompozice je podobná agregaci, avšak reprezentuje silnější vztah. Entita části nemá bez celku smysl. Pokud zanikne celek, zanikají automaticky i jeho části.

Kompozici zakreslujeme stejně jako agregaci, kosočtverec je ovšem plný. U entity reprezentující celek musí být multiplicita vždy 1. Tato vazba bývá matoucí a doporučil bych se jí spíše vyhýbat a nahradit ji agregací.

Příkladem může být Objednávka a Položka objednávky. Zatímco článek z minulého příkladu dává bez sekce ještě nějaký smysl, položka objednávky bez objednávky smysl nedává. Proto je zde použita kompozice.

UML notace vztahu kompozice mezi třídami v doménovém diagramu - UML

Generalizace (Generalization)

Posledním vztahem, který si zde uvedeme, je generalizace. Z hlediska implementace se jedná o dědičnost. Jedna entita dědí vlastnosti a chování jiné. S touto vazbou jsme se již setkali u Use Case diagramu.

Generalizaci zakreslujeme jako plnou čáru, zakončenou na jedné straně prázdnou uzavřenou šipkou (nebo chcete-li trojúhelníkem). Šipka je na straně entity, ze které se dědí.

Příkladem může být třída Tvar, ze které dědí třídy Čtverec a Kruh.

UML notace vztahu generalizace mezi třídami v doménovém diagramu - UML

Multiplicita

Vraťme se ještě k multiplicitě (neboli násobnosti). Multiplicitu můžeme uvést u vazeb asociace, agregace a kompozice (zde pouze z jedné strany).

Vraťme se k příkladu sekce - článek:

Multiplicitu zde čteme takto: Sekce může mít libovolný počet článků (to poznáme podle hvězdičky u třídy Článek). Článek patří do 1 až libovolně sekcí (to poznáme podle 1..* u Sekce). Pojďme si nyní uvést jednotlivé možné zápisy multiplicity:

  • 1 (číslo) - Označuje konkrétní hodnotu (zde právě 1).
  • * (hvězdička) - Označuje libovolný počet (tedy i 0). Místo hvězdičky můžeme v některých materiálech nalézt symbol N.
  • 1..* (interval) - Pomocí 2 teček můžeme označit interval. Do něj vkládáme nám již známé symboly, např.: 2..6 nebo 1..* nebo 0..1.

Zápisy můžeme dokonce i slučovat, např. takto: 1, 2, 3, 7..*. Tento zápis označuje multiplicitu 1, 2, 3 nebo 7 a více.

Pokud není multiplicita uvedena, označuje to výchozí hodnotu 1.

Příklad

Pokračujme v našem návrhu ITnetwork, zamysleme se nad základními entitami a propojme je vztahy. Mohli bychom dospět k podobnému výsledku (uvedl jsem i atributy, což však není vůbec nutné):

Doménový model redakčního systému v UML - UML

Všimněte si, že v doménovém diagramu vazby ještě dodatečně popisujeme, v Class diagramu to již zpravidla neděláme. Vyplněná šipka označuje směr, ve kterém čteme popisek vazby, např. redaktor píše článek. Mohl by zde být obrácený směr šipky a popis "byl napsán", i když to nezní tak přirozeně.

V následujícím kvízu, Kvíz - Use Case diagram a doménový model v UML, si vyzkoušíme nabyté zkušenosti z předchozích lekcí.


 

Předchozí článek
Řešené úlohy k 3. lekci UML
Všechny články v sekci
UML
Přeskočit článek
(nedoporučujeme)
Kvíz - Use Case diagram a doménový model v UML
Článek pro vás napsal David Hartinger
Avatar
Uživatelské hodnocení:
236 hlasů
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David se informační technologie naučil na Unicorn University - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity