UML diagramy tříd
Diagram struktury, který nese většinu slovníku UML: typy, jejich atributy a operace a šest druhů čar, které je spojují. Naučte se pořádně tenhle a dalších šest diagramů struktury vás bude stát skoro nic.
11 min čteníUML 2.5.14 z 35
Krátká odpověď
- Agregace i kompozice znamenají má. Jediný rozdíl je, jestli části přežijí celek: prázdný kosočtverec ano, plný ne.
- Generalizace je plná čára s prázdným trojúhelníkem, realizace přerušovaná s týmž trojúhelníkem. Plná je je druhem, přerušovaná naplňuje smlouvu.
- Násobnost stojí na konci asociace, ne uprostřed: 1, 0..1, 1..* a samotná hvězdička jako zkratka za 0..*.
- Diagram tříd modeluje typy s chováním, ER diagram uložená data. Jedna doména má často obojí a nemusí si odpovídat prvek po prvku.
01Jak číst box#
Třída je obdélník s nejvýše třemi oddíly nad sebou. Povinný je jen první.
- Název. Jméno typu, na střed a tučně. Pokud je třída abstraktní, název je kurzívou. Klíčové slovo ve francouzských uvozovkách nad ním -
«interface»,«enumeration»- zúží, o jaký druh klasifikátoru jde. - Atributy. Jeden na řádek, zapsaný jako
viditelnost název: Typ [násobnost] = výchozí hodnota. Všechno kromě názvu je volitelné. - Operace. Jedna na řádek, zapsaná jako
viditelnost název(parametry): NávratovýTyp.
Úvodní symbol u každého členu je jeho viditelnost: + veřejný, - soukromý, # chráněný a ~ balíčkový. Podtržený člen je statický - patří třídě, ne instanci.
02Šest čar#
Téměř celý význam diagramu tříd je v čarách a stojí za to zapamatovat si jen šest. Konec, který nese ozdobu, je v každém případě podstatný.
| Prvek | Notace | Co znamená |
|---|---|---|
| Asociace | Strukturální propojení. Instance jedné vědí o instancích druhé. Násobnost na každém konci říká kolik. | |
| Směrovaná asociace | Totéž, ale navigovatelné jen ve směru šipky. Payment se dostane ke své PaymentMethod; metoda se zpátky nedostane. | |
| Agregace | Vztah celek-část, kde část přežije celek. Prázdný kosočtverec sedí u celku. | |
| Kompozice | Vztah celek-část, kde část zanikne s celkem. Vyplněný kosočtverec u celku. Část má právě jednoho vlastníka. | |
| Generalizace | Dědičnost. Prázdný trojúhelník míří na rodiče. Čtěte to jako „je druhem“. | |
| Realizace | Implementace rozhraní. Přerušovaná čára, prázdný trojúhelník u rozhraní. | |
| Závislost | Nejslabší propojení: jedna používá druhou, typicky jako parametr nebo lokální proměnnou. Používejte střídmě, jinak skončí každá třída spojená s každou. |
Plné čáry bez trojúhelníku jsou strukturální; přerušované čáry jsou vždy slabší než plné.
03Násobnost#
Číslo na konci čáry říká, kolik instancí se účastní. Sedí na vzdálenějším konci od třídy, kterou omezuje, a to lidi mate: při čtení Merchant 1 —— 0..* Payment znamená 0..* vedle Payment, že jeden obchodník má nula nebo více plateb.
1- právě jedna. Výchozí hodnota, když není napsané nic, i když napsat ji je jasnější.0..1- volitelná. Tohle je notace pro referenci, která může být prázdná.*nebo0..*- libovolný počet včetně nuly.1..*- aspoň jedna. Smysluplné a často zapomínané omezení.2..4- explicitní rozsah.
Násobnost je nejlevnější výhra v přesnosti v celé notaci. „Může to být prázdné?“ a „může jich být víc než jedna?“ jsou ty dvě otázky, které na návrhovém review vyplaví skutečné neshody, a odpověď se zapíše třemi znaky.
04Asociace, agregace, kompozice#
Tyhle tři jsou týž tvar vztahu ve třech silách a rozdíl je o životním cyklu, ne o tom, jak silně spolu ty dvě věci souvisejí.
Obyčejná asociace netvrdí o vlastnictví nic. Dvě věci jsou propojené. To je všechno a je to správná výchozí volba.
Agregace - prázdný kosočtverec - tvrdí vztah celek-část, kde je část nezávislá. Poctivá rada: agregace nese v UML 2.5.1 téměř žádnou formální sémantiku a čtenáři se neshodnou, co z ní plyne. Pokud si nejste jistí mezi asociací a agregací, nakreslete asociaci.
Kompozice - vyplněný kosočtverec - je ta, která říká něco silného a ověřitelného. Část patří právě jednomu celku a zaniká s ním. V platebním modelu existuje Refund jen jako součást Payment; volně poletující vrácení neexistuje. To je skutečné omezení, které stojí za zápis, a mapuje se přímo na kaskádové mazání nebo vlastněnou kolekci v kódu.
05Kdy takový nakreslit#
Sáhněte po něm, když
- Dohoda na doménovém slovníku s lidmi, kteří kód číst nebudou
- Vztahy mají skutečná omezení - volitelnost, kardinalita, vlastnictví
- Zaškolení někoho do podsystému, jehož tvar ze stromu souborů zjevný není
- Návrh schématu, API kontraktu nebo čehokoli s uloženou strukturou
Sáhněte po něčem jiném, když
- Překreslovali byste to, co IDE vygeneruje ze zdrojáku jedním kliknutím
- Otázka je o pořadí nebo čase - kreslete sekvenční diagram nebo diagram aktivit
- Třídy jsou čistá instalatéřina frameworku bez doménového významu
- Máte chuť dát na jedno plátno každou třídu v systému
Nejužitečnější diagramy tříd jsou v praxi malé. Sedm až dvanáct tříd, atributy na těch, o kterých se právě mluví, a vynechané všude jinde, a každá čára nese násobnost. Takový diagram se na poradě přečte a urovná spory. Diagram tříd se sto boxy je artefakt, ne komunikace.
06Pět chyb, kterým se vyplatí vyhnout#
- Šipky mířící obráceně. Generalizace a realizace míří na abstrakci. Pokud máte trojúhelník na potomkovi, diagram říká opak toho, co jste mysleli.
- Kompozice použitá pro „silně souvisí“. Vyplněný kosočtverec je tvrzení o životním cyklu. Použijte ho jen tehdy, když zničení celku opravdu zničí i část.
- Žádné násobnosti. Čára, která nemá na koncích nic, zahodila tu nejcennější informaci, jakou by diagram mohl nést.
- Míchání výšek. Doménové třídy a třídy frameworku na jednom plátně. Rozdělte to; každý diagram má být čitelný pro jedno publikum.
- Modelování každého getteru. Operace patří na diagram tehdy, když nesou význam.
getName()nenese.
Pokud chcete model tříd ověřit proti realitě, nakreslete jeden objektový diagram - jediný konkrétní snímek instancí. Násobnosti, které v abstraktní rovině vypadaly v pořádku, mívají ve zvyku spadnout hned, jak je zkusíte vyplnit skutečnými hodnotami.
Po jednom řádku na každé
- 01Tři oddíly: název, atributy, operace. Raději vynechat než nechat prázdné.
- 02Značky viditelnosti jsou + - # ~; podtržení znamená statický, kurzíva v názvu abstraktní.
- 03Význam nese šest čar; ozdobený konec je vždycky podstatný.
- 04Generalizace a realizace míří na abstrakci.
- 05Kompozice je tvrzení o životním cyklu - část zaniká s celkem. Agregace téměř nic neznamená; raději obyčejnou asociaci.
- 06Násobnost je nejlevnější dostupná výhra v přesnosti. Dejte ji na každou čáru.
07Časté dotazy#
Jaký je rozdíl mezi agregací a kompozicí?
Obojí znamená má, a rozdíl je v tom, co se stane, když celek zanikne. Agregace, prázdný kosočtverec, znamená, že části mohou celek přežít: smažte oddělení a jeho zaměstnanci pořád existují. Kompozice, plný kosočtverec, znamená, že nemohou: smažte objednávku a její řádky jdou s ní.
Co znamenají znaky plus, minus a mřížka v diagramu tříd?
Jsou to značky viditelnosti na atributech a operacích, psané těsně před názvem členu. Plus je veřejný, minus soukromý, mřížka chráněný a vlnovka viditelný v rámci balíku.
Co znamená 0..* v UML?
Je to násobnost a znamená nula nebo více. Násobnost stojí na konci asociace a omezuje, kolik instancí se na tomto konci může zúčastnit: 1 je právě jedna, 0..1 je volitelná, 1..* je jedna nebo více a samotná hvězdička je zkratka za 0..*.
Jaký je rozdíl mezi generalizací a realizací?
Generalizace je dědičnost mezi dvěma třídami, kreslená plnou čarou s prázdným trojúhelníkem. Realizace je třída implementující rozhraní, kreslená přerušovanou čarou se stejným prázdným trojúhelníkem. Plná znamená je druhem, přerušovaná znamená naplňuje smlouvu.
Čím se UML diagram tříd liší od ER diagramu?
Diagram tříd modeluje typy, které mají chování, takže operace patří na třídu a popisuje objekty v paměti. ER diagram modeluje data, která systém ukládá, nemá operace a jeho vztahy jsou omezené na to, co dokáže vynutit relační databáze. Jedna doména má často obojí a nemusí si odpovídat prvek po prvku.
V této sérii
- 01Co je UML?
- 02Symboly UML
- 03Výběr diagramu
- 04Diagramy tříd
- 05Příklady diagramů tříd
- 06Jak nakreslit diagram tříd
- 07Symboly diagramu tříd
- 08Sekvenční diagramy
- 09Příklady sekvenčních diagramů
- 10Jak nakreslit sekvenční diagram
- 11Diagramy případů užití
- 12Příklady případů užití
- 13Diagramy aktivit
- 14Příklady aktivit
- 15Stavové diagramy
- 16Příklady stavových diagramů
- 17Diagramy komponent
- 18Příklady komponent
- 19Kreslení diagramu komponent
- 20Symboly komponent
- 21Diagramy nasazení
- 22Příklady nasazení
- 23Diagramy objektů
- 24Diagramy balíků
- 25Diagramy složené struktury
- 26Komunikační diagramy
- 27Sekvenční vs komunikační
- 28Časové diagramy
- 29Diagramy přehledu interakcí
- 30Diagramy profilů
- 31UML pomocí AI
- 32Příklad e-shopu
- 33Příklad banky
- 34Příklad mikroslužeb
- 35Příklad AWS
Související články
Základy
Diagramy struktury
Diagramy struktury
Diagramy chování
Přehled notace
Základy