Diagram tříd
Diagram tříd je hlavním stavebním prvkem objektově orientovaného modelování. Používá se pro obecné konceptuální modelování struktury aplikace i pro podrobné modelování převodu modelu do programového kódu. Diagram tříd lze také použít pro datové modelování. Třídy v diagramu tříd představují jak hlavní prvky a interakce v aplikaci, tak třídy, které je třeba naprogramovat.
Kopírovat
Vložení
---
title: Animal example
---
classDiagram
note "From Duck till Zebra"
Animal <|-- Duck
note for Duck "can fly
can swim
can dive
can help in debugging"
Animal <|-- Fish
Animal <|-- Zebra
Animal : +int age
Animal : +String gender
Animal: +isMammal()
Animal: +mate()
class Duck{
+String beakColor
+swim()
+quack()
}
class Fish{
-int sizeInFeet
-canEat()
}
class Zebra{
+bool is_wild
+run()
}
Syntaxe
Třída
UML poskytuje mechanismus pro reprezentaci členů třídy, jako jsou vlastnosti a metody, a jejich dodatečných informací. Jednotlivá instance třídy obsahuje tři části:
- Horní část obsahuje název třídy. Vypisuje se tučně, na střed, s prvním písmenem velkým. Může také obsahovat volitelný text komentáře popisující povahu třídy.
- Střední část obsahuje vlastnosti třídy. Jsou zarovnány vlevo a první písmeno je malé.
- Spodní část obsahuje operace, které třída může provádět. Jsou také zarovnány vlevo a první písmeno je malé.
Kopírovat
Vložení
---
title: Bank example
---
classDiagram
class BankAccount
BankAccount : +String owner
BankAccount : +Bigdecimal balance
BankAccount : +deposit(amount)
BankAccount : +withdrawal(amount)
Definice třídy
Existují dva způsoby, jak definovat třídu
- Explicitní použití syntaxe class (například class Animal), což definuje třídu Animal.
- Prostřednictvím vztahu, který současně definuje dvě třídy a vztah mezi nimi (například Vehicle <|-- Car).
Kopírovat
Vložení
classDiagram
class Animal
Vehicle <|-- Car
Pravidla pojmenování: název třídy se může skládat pouze z alfanumerických znaků (včetně unicode), podtržítek (_) a pomlček (-).
Popisek třídy
Pokud potřebujete třídě poskytnout popisek, můžete použít následující syntaxi:
Kopírovat
Vložení
classDiagram
class Animal["Animal with a label"]
class Car["Car with *! symbols"]
Animal --> Car
Speciální znaky v popisku můžete také escapovat pomocí zpětných apostrofů (``):
Kopírovat
Vložení
classDiagram
class `Animal Class!`
class `Car Class`
`Animal Class!` --> `Car Class`
Definice členů třídy
UML poskytuje mechanismus pro reprezentaci členů třídy (jako jsou vlastnosti a metody) a dodatečných informací o nich.
Mermaid rozlišuje vlastnosti a funkce nebo metody podle přítomnosti kulatých závorek (). Ty s () jsou považovány za funkce nebo metody, všechny ostatní za vlastnosti.
Členy třídy lze definovat dvěma způsoby; bez ohledu na to, kterou syntaxi pro definici členů použijete, je výstup stejný. Tyto dva různé způsoby jsou:
1. Pro přiřazení člena třídy použijte dvojtečku (:) následovanou názvem člena; to je užitečné pro definici jednoho člena najednou. Například:
Kopírovat
Vložení
classDiagram
class BankAccount
BankAccount : +String owner
BankAccount : +BigDecimal balance
BankAccount : +deposit(amount)
BankAccount : +withdrawal(amount)
2. Pro přiřazení členů třídy použijte složené závorky {}, přičemž členy jsou seskupeny ve složených závorkách. Vhodné pro definici více členů najednou. Například:
Kopírovat
Vložení
classDiagram
class BankAccount{
+String owner
+BigDecimal balance
+deposit(amount)
+withdrawal(amount)
}
Návratový typ
Na konci definice metody nebo funkce můžete určit datový typ, který bude vrácen. Poznámka: mezi poslední ')' a návratovým typem musí být mezera. Příklad:
Kopírovat
Vložení
classDiagram
class BankAccount{
+String owner
+BigDecimal balance
+deposit(amount) bool
+withdrawal(amount) int
}
Obecný typ
Obecný typ lze vyjádřit jako součást definice třídy a lze jej použít i pro členy třídy nebo návratový typ. Chcete-li položku vyjádřit jako obecný typ, uzavřete typ do vlnovek (~). Jsou podporovány vnořené deklarace typů, jako je List<List<int>>, ale v současnosti nejsou podporovány obecné typy obsahující čárku, jako je List<List<K, V>>.
Kopírovat
Vložení
classDiagram
class Square~Shape~{
int id
List~int~ position
setPoints(List~int~ points)
getPoints() List~int~
}
Square : -List~string~ messages
Square : +setMessages(List~string~ messages)
Square : +getMessages() List~string~
Square : +getDistanceMatrix() List~List~int~~
Viditelnost
Pro popis viditelnosti vlastnosti nebo metody/funkce lze před název člena uvést volitelný symbol:
- + veřejné
- - soukromé
- # chráněné
- ~ interní
Definice vztahů
Vztah je obecný termín zahrnující určité typy logických spojení nacházených v diagramech tříd a diagramech objektů.
Kopírovat
Vložení
[classA][Arrow][ClassB]
UML为类定义了八种不同类型的关系:
| Typ | Popis |
|---|---|
| <|-- | Dědičnost |
| *-- | Kompozice |
| o-- | Agregace |
| --> | Asociace |
| -- | Odkaz (plný) |
| ..> | Závislost |
| ..|> | Implementace |
| .. | Odkaz (přerušovaný) |
Kopírovat
Vložení
classDiagram
classA <|-- classB
classC *-- classD
classE o-- classF
classG <-- classH
classI -- classJ
classK <.. classL
classM <|.. classN
classO .. classP
Popiskem můžeme popsat povahu vztahu mezi dvěma třídami. Šipku lze navíc použít i obráceně:
Kopírovat
Vložení
classDiagram
classA --|> classB : Inheritance
classC --* classD : Composition
classE --o classF : Aggregation
classG --> classH : Association
classI -- classJ : Link(Solid)
classK ..> classL : Dependency
classM ..|> classN : Realization
classO .. classP : Link(Dashed)
Popisek vztahu
Vztahu lze přidat text popisku:
Kopírovat
Vložení
[classA][Arrow][ClassB]:LabelText
Kopírovat
Vložení
classDiagram
classA <|-- classB : implements
classC *-- classD : composition
classE o-- classF : aggregation
Obousměrný vztah
Obousměrný vztah může logicky představovat asociaci N:M:
Kopírovat
Vložení
classDiagram
Animal <|--|> Zebra
语法如下:
Kopírovat
Vložení
[Relation Type][Link][Relation Type]
其中 Relation Type 是以下之一:
| Typ | Popis |
|---|---|
| <| | Dědičnost |
| * | Kompozice |
| o | Agregace |
| > | Asociace |
| < | Asociace |
| |> | Implementace |
Link je jeden z následujících:
| Typ | Popis |
|---|---|
| -- | Plná čára |
| .. | Přerušovaná čára |
Rozhraní lízátko
Třídě lze také přiřadit speciální typ vztahu, který pro třídu definuje rozhraní lízátko. Rozhraní lízátko se definuje pomocí následující syntaxe:
- bar ()-- foo
- foo --() bar
Rozhraní s lízátkem (bar) se připojuje ke třídě (foo).
Poznámka: každé definované rozhraní je jedinečné, aby nebylo sdíleno mezi třídami a aby na něj nesměřovalo více spojení.
Kopírovat
Vložení
classDiagram
bar ()-- foo
Kopírovat
Vložení
classDiagram
class Class01 {
int amount
draw()
}
Class01 --() bar
Class02 --() bar
foo ()-- Class01
Definice jmenného prostoru
Jmenný prostor seskupuje třídy.
Kopírovat
Vložení
classDiagram
namespace BaseShapes {
class Triangle
class Rectangle {
double width
double height
}
}
Kardinalita/multiplicita vztahu
Multiplicita nebo kardinalita v diagramu tříd vyjadřuje počet instancí jedné třídy, které mohou být spojeny s instancemi jiné třídy. Například každá společnost má jednoho nebo více zaměstnanců, nemůže mít nula, zatímco každý zaměstnanec je aktuálně zaměstnán v nula nebo jedné společnosti.
Symbol multiplicity se umisťuje poblíž konce asociace.
Různé možnosti kardinality jsou:
- 1 pouze 1
- 0..1 0 nebo 1
- 1..* 1 nebo více
- * 0 nebo 1 nebo více
- n n (kde n>1)
- 0..n 0 až n (kde n>1)
- 1..n 1 až n (kde n>1)
Kardinalitu lze snadno definovat uzavřením textové volby do dvojitých uvozovek „“ před nebo za danou šipkou. Například:
Kopírovat
Vložení
[classA] "cardinality1" [Arrow] "cardinality2" [ClassB]:LabelText
Kopírovat
Vložení
classDiagram
Customer "1" --> "*" Ticket
Student "1" --> "1..*" Course
Galaxy --> "many" Star : Contains
Komentáře třídy
Třídy lze opatřit komentáři pomocí značek, které poskytují dodatečná metadata o třídě. To může jasněji vyjádřit povahu třídy. Mezi běžné komentáře patří:
- <<Interface>> představuje třídu rozhraní
- <<Abstract>> představuje abstraktní třídu
- <<Service>> představuje třídu služby
- <<Enumeration>> představuje výčet
Komentáře se definují mezi úvodními << a závěrečnými >>. Ke třídě lze přidat komentáře třemi způsoby; výstup všech tří způsobů je stejný:
- Inline s definicí třídy
Kopírovat
Vložení
classDiagram
class Shape <<interface>>
Na samostatném řádku za definicí třídy:
Kopírovat
Vložení
classDiagram
class Shape
<<interface>> Shape
Shape : noOfVertices
Shape : draw()
- Ve vnořené struktuře definice třídy:
Kopírovat
Vložení
classDiagram
class Shape{
<<interface>>
noOfVertices
draw()
}
class Color{
<<enumeration>>
RED
BLUE
GREEN
WHITE
BLACK
}
Komentář
Do diagramu tříd můžete vkládat komentáře, které editor ignoruje. Komentář musí zabírat samostatný řádek a musí začínat dvěma znaky procenta (%%). Veškerý text až do následujícího řádku je považován za komentář, včetně jakékoli syntaxe diagramu tříd.
Kopírovat
Vložení
classDiagram
%% This whole line is a comment classDiagram class Shape <<interface>>
class Shape{
<<interface>>
noOfVertices
draw()
}
Nastavení směru diagramu
Směr vykreslování diagramu tříd můžete nastavit pomocí příkazu směru:
Kopírovat
Vložení
classDiagram
direction RL
class Student {
-idCard : IdCard
}
class IdCard{
-id : int
-name : string
}
class Bike{
-id : int
-name : string
}
Student "1" --o "1" IdCard : carries
Student "1" --o "1" Bike : rides
Interakce
K uzlu lze přiřadit událost kliknutí. Událost kliknutí může spustit zpětné volání JavaScriptu nebo otevřít odkaz, který se načte v nové kartě prohlížeče. Poznámka: tato funkce je zakázána při securityLevel='strict' a povolena při securityLevel='loose'.
Tyto operace lze definovat na samostatném řádku za všemi deklaracemi tříd.
Kopírovat
Vložení
action className "reference" "tooltip"
click className call callback() "tooltip"
click className href "url" "tooltip"
- action je link nebo callback v závislosti na typu interakce, kterou chcete vyvolat.
- className je id uzlu spojeného s operací.
- reference může být odkaz URL nebo název funkce zpětného volání.
- (volitelné) Popis nástroje je řetězec zobrazený při najetí myší na prvek.
- Funkce zpětného volání bude zavolána s nodeId jako parametrem.
Poznámka
K diagramu lze přidat komentář pomocí note "line1 line2". Ke konkrétní třídě lze přidat komentář pomocí note for <CLASS NAME> "line1 line2".
Příklad
Kopírovat
Vložení
classDiagram
note "This is a general note"
note for MyClass "This is a note for a class"
class MyClass{
}
Odkaz URL:
Kopírovat
Vložení
classDiagram
class Shape
link Shape "https://www.github.com" "This is a tooltip for a link"
class Shape2
click Shape2 href "https://www.github.com" "This is a tooltip for a link"
Konfigurace
Rámeček členů
Prázdný rámeček členů uzlu třídy lze skrýt změnou hodnoty hideEmptyMembersBox v konfiguraci diagramu tříd.
Kopírovat
Vložení
---
config:
class:
hideEmptyMembersBox: true
---
classDiagram
class Duck