Register
Process Type
Graphical expression
Mind Type
Structured expression
Note Type
Efficient expression

Diagram třídSyntaxe

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.

Kód
                            
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é.
Kód
                            
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).
Kód
                            
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:

Kód
                            
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ů (``):

Kód
                            
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:

Kód
                            
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:

Kód
                            
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:

Kód
                            
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>>.

Kód
                            
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ý)
Kód
                            
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ě:

Kód
                            
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
Kód
                            
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:

Kód
                            
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í.

Kód
                            
Kopírovat
Vložení
classDiagram bar ()-- foo
Kód
                            
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.

Kód
                            
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
Kód
                            
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:

Kód
                            
Kopírovat
Vložení
classDiagram class Shape <<interface>> Shape Shape : noOfVertices Shape : draw()
  • Ve vnořené struktuře definice třídy:
Kód
                            
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.

Kó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:

Kód
                            
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

Kód
                            
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:

Kód
                            
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.

Kód
                            
Kopírovat
Vložení
--- config: class: hideEmptyMembersBox: true --- classDiagram class Duck