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

Klasių diagramaSintaksė

Klasių diagrama

Klasių diagrama yra pagrindinis objektinio modeliavimo elementas. Ji naudojama tiek bendram programos struktūros konceptualiajam modeliavimui, tiek detaliam modeliavimui, kai modelis verčiamas programavimo kodu. Klasių diagrama taip pat gali būti naudojama duomenų modeliavimui. Klasių diagramos klasės žymi tiek pagrindinius programos elementus ir sąveikas, tiek klases, kurias reikia programuoti.

Kodas
                            
Kopijuoti
Įterpti
--- 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() }

Sintaksė

Klasė

UML suteikia mechanizmą klasės nariams, pavyzdžiui, savybėms ir metodams, bei papildomai informacijai apie juos pavaizduoti. Vienas klasės egzempliorius susideda iš trijų dalių:

  • Viršuje pateikiamas klasės pavadinimas. Jis spausdinamas pusjuodžiu šriftu, centruotas, pirmoji raidė didžioji. Jame taip pat gali būti neprivalomas komentaro tekstas, aprašantis klasės pobūdį.
  • Viduryje pateikiamos klasės savybės. Jos lygiuojamos į kairę, pirmoji raidė mažoji.
  • Apačioje pateikiamos operacijos, kurias klasė gali atlikti. Jos taip pat lygiuojamos į kairę, o pirmoji raidė mažoji.
Kodas
                            
Kopijuoti
Įterpti
--- title: Bank example --- classDiagram class BankAccount BankAccount : +String owner BankAccount : +Bigdecimal balance BankAccount : +deposit(amount) BankAccount : +withdrawal(amount)

Klasės apibrėžimas

Klasę galima apibrėžti dviem būdais

  • Aiškiai naudojant class sintaksę (pavyzdžiui, class Animal) – taip apibrėžiama Animal klasė.
  • Per ryšį, kuris vienu metu apibrėžia dvi klases ir ryšį tarp jų (pavyzdžiui, Vehicle <|-- Car).
Kodas
                            
Kopijuoti
Įterpti
classDiagram class Animal Vehicle <|-- Car

Pavadinimų taisyklės: klasės pavadinimą gali sudaryti tik raidiniai skaitmeniniai simboliai (įskaitant unicode), pabraukimas (_) ir brūkšnelis (-).

Klasės žymeklis

Jei klasei reikia suteikti žymeklį, galite naudoti šią sintaksę:

Kodas
                            
Kopijuoti
Įterpti
classDiagram class Animal["Animal with a label"] class Car["Car with *! symbols"] Animal --> Car

Taip pat galite naudoti atgalines kabutes (``), kad escape'intumėte specialiuosius simbolius žymeklyje:

Kodas
                            
Kopijuoti
Įterpti
classDiagram class `Animal Class!` class `Car Class` `Animal Class!` --> `Car Class`

Klasės narių apibrėžimas

UML suteikia mechanizmą klasės nariams (tokiems kaip savybės ir metodai) bei papildomai informacijai apie juos pavaizduoti.

Mermaid pagal tai, ar yra skliaustai (), atskiria savybes nuo funkcijų ar metodų. Tie, kurie turi (), laikomi funkcijomis arba metodais, o visi kiti – savybėmis.

Klasės narius galima apibrėžti dviem būdais; nesvarbu, kurią sintaksę naudosite nariams apibrėžti, išvesties rezultatas bus toks pat. Du skirtingi būdai:

1. Susieti klasės narį naudojant dvitaškį (:) ir po jo nario pavadinimą; tai naudinga apibrėžiant vieną narį vienu metu. Pavyzdžiui:

Kodas
                            
Kopijuoti
Įterpti
classDiagram class BankAccount BankAccount : +String owner BankAccount : +BigDecimal balance BankAccount : +deposit(amount) BankAccount : +withdrawal(amount)

2. Susieti klasės narius naudojant riestinius skliaustus {}, kuriuose nariai sugrupuoti. Tinka apibrėžti kelis narius vienu metu. Pavyzdžiui:

Kodas
                            
Kopijuoti
Įterpti
classDiagram class BankAccount{ +String owner +BigDecimal balance +deposit(amount) +withdrawal(amount) }

Grąžinimo tipas

Metodo ar funkcijos apibrėžimo pabaigoje galite nurodyti grąžinamų duomenų tipą. Pastaba: tarp paskutinio ')' ir grąžinimo tipo turi būti vienas tarpas. Pavyzdys:

Kodas
                            
Kopijuoti
Įterpti
classDiagram class BankAccount{ +String owner +BigDecimal balance +deposit(amount) bool +withdrawal(amount) int }

Bendrinis tipas

Bendrinis tipas gali būti išreikštas kaip klasės apibrėžimo dalis, taip pat naudojamas klasės nariams ar grąžinimo tipui. Norėdami elementą išreikšti kaip bendrinį tipą, tą tipą apgaubkite bangele (~). Palaikomi įdėtieji tipų apibrėžimai, pavyzdžiui, List<List<int>>, tačiau šiuo metu nepalaikomi bendriniai tipai su kableliais, tokie kaip List<List<K, V>>.

Kodas
                            
Kopijuoti
Įterpti
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~~

Matomumas

Norint apibūdinti savybės ar metodo / funkcijos matomumą, prieš nario pavadinimą galima naudoti neprivalomą simbolį:

  • + viešas
  • - privatus
  • # apsaugotas
  • ~ vidinis

Ryšio apibrėžimas

Ryšys yra bendras terminas, apimantis specifinius loginių jungčių tipus, aptinkamus klasių ir objektų diagramose.

                            
Kopijuoti
Įterpti
[classA][Arrow][ClassB]

UML为类定义了八种不同类型的关系:

Tipas Aprašymas
<|-- Paveldėjimas
*-- Kompozicija
o-- Agregacija
--> Asociacija
-- Jungtis (ištisinė)
..> Priklausomybė
..|> Realizacija
.. Jungtis (brūkšninė)
Kodas
                            
Kopijuoti
Įterpti
classDiagram classA <|-- classB classC *-- classD classE o-- classF classG <-- classH classI -- classJ classK <.. classL classM <|.. classN classO .. classP

Galime naudoti žymeklį, kad apibūdintume ryšio tarp dviejų klasių pobūdį. Be to, rodyklę galima naudoti ir atvirkštine kryptimi:

Kodas
                            
Kopijuoti
Įterpti
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)

Ryšio žymeklis

Ryšiui galima pridėti žymeklio tekstą:

                            
Kopijuoti
Įterpti
[classA][Arrow][ClassB]:LabelText
Kodas
                            
Kopijuoti
Įterpti
classDiagram classA <|-- classB : implements classC *-- classD : composition classE o-- classF : aggregation

Dvikryptis ryšys

Dvikryptis ryšys logiškai gali reikšti N:M asociaciją:

Kodas
                            
Kopijuoti
Įterpti
classDiagram Animal <|--|> Zebra

语法如下:

                            
Kopijuoti
Įterpti
[Relation Type][Link][Relation Type]

其中 Relation Type 是以下之一:

Tipas Aprašymas
<| Paveldėjimas
* Kompozicija
o Agregacija
> Asociacija
< Asociacija
|> Realizacija

Link yra vienas iš šių:

Tipas Aprašymas
-- Ištisinė linija
.. Brūkšninė linija

Ledipukų sąsaja

Klasei taip pat galima priskirti specialų ryšio tipą, kuris apibrėžia ledipuko sąsają klasei. Ledipuko sąsaja apibrėžiama naudojant šią sintaksę:

  • bar ()-- foo
  • foo --() bar

Sąsaja su ledpuku (bar) jungiasi prie klasės (foo).

Pastaba: kiekviena apibrėžta sąsaja yra unikali, siekiant jos nesidalyti tarp klasių ir neleisti kelių jungčių į ją.

Kodas
                            
Kopijuoti
Įterpti
classDiagram bar ()-- foo
Kodas
                            
Kopijuoti
Įterpti
classDiagram class Class01 { int amount draw() } Class01 --() bar Class02 --() bar foo ()-- Class01

Vardų erdvės apibrėžimas

Vardų erdvė grupuoja klases.

Kodas
                            
Kopijuoti
Įterpti
classDiagram namespace BaseShapes { class Triangle class Rectangle { double width double height } }

Ryšio kardinalumas / dauginis

Dauginis arba kardinalumas klasių diagramoje nurodo, su kiek kitos klasės egzempliorių gali būti susietas vienos klasės egzempliorius. Pavyzdžiui, kiekviena įmonė turi vieną ar daugiau darbuotojų, negali būti nulio, o kiekvienas darbuotojas šiuo metu dirba nulyje arba vienoje įmonėje.

Dauginio simbolis dedamas prie asociacijos pabaigos.

Skirtingos kardinalumo parinktys:

  • 1 tik 1
  • 0..1 0 arba 1
  • 1..* 1 ar daugiau
  • * 0, 1 ar daugiau
  • n n (kur n>1)
  • 0..n nuo 0 iki n (kur n>1)
  • 1..n nuo 1 iki n (kur n>1)

Kardinalumą galima lengvai apibrėžti teksto parinktį prieš arba po nurodytos rodyklės apgaubiant dvigubomis kabutėmis „“. Pavyzdžiui:

                            
Kopijuoti
Įterpti
[classA] "cardinality1" [Arrow] "cardinality2" [ClassB]:LabelText
Kodas
                            
Kopijuoti
Įterpti
classDiagram Customer "1" --> "*" Ticket Student "1" --> "1..*" Course Galaxy --> "many" Star : Contains

Klasės komentaras

Klasę galima komentuoti naudojant žymas, kad būtų pateikti papildomi metaduomenys apie tą klasę. Tai gali aiškiau parodyti klasės pobūdį. Kai kurie įprasti komentarai:

  • <<Interface>> žymi sąsajos klasę
  • <<Abstract>> žymi abstrakčią klasę
  • <<Service>> žymi paslaugos klasę
  • <<Enumeration>> žymi enum

Komentaras apibrėžiamas pradiniu << ir baigiamuoju >>. Yra trys būdai pridėti komentarą prie klasės; visų trijų būdų išvestis yra tokia pati:

  • Inline su klasės apibrėžimu
                            
Kopijuoti
Įterpti
classDiagram class Shape <<interface>>

Atskiroje eilutėje po klasės apibrėžimo:

Kodas
                            
Kopijuoti
Įterpti
classDiagram class Shape <<interface>> Shape Shape : noOfVertices Shape : draw()
  • Įdėta klasės apibrėžimo struktūroje:
Kodas
                            
Kopijuoti
Įterpti
classDiagram class Shape{ <<interface>> noOfVertices draw() } class Color{ <<enumeration>> RED BLUE GREEN WHITE BLACK }

Komentaras

Klasių diagramoje galima įrašyti komentarą; redaktorius jį ignoruos. Komentaras turi užimti atskirą eilutę ir prasidėti dvigubu procento ženklu (%%). Visas tekstas iki kitos eilutės laikomas komentaru, įskaitant bet kokią klasių diagramos sintaksę.

Kodas
                            
Kopijuoti
Įterpti
classDiagram %% This whole line is a comment classDiagram class Shape <<interface>> class Shape{ <<interface>> noOfVertices draw() }

Diagramos krypties nustatymas

Galite naudoti krypties sakinį klasių diagramos atvaizdavimo krypčiai nustatyti:

Kodas
                            
Kopijuoti
Įterpti
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

Sąveika

Mazgams galima priskirti paspaudimo įvykius. Paspaudimo įvykis gali iškviesti JavaScript atgalinio ryšio funkciją arba atidaryti nuorodą, kuri bus įkelta naujame naršyklės skirtuke. Pastaba: naudojant securityLevel='strict' ši funkcija išjungiama, o naudojant securityLevel='loose' – įjungiama.

Šias operacijas galite apibrėžti atskiroje eilutėje po visų klasių deklaracijų.

                            
Kopijuoti
Įterpti
action className "reference" "tooltip" click className call callback() "tooltip" click className href "url" "tooltip"
  • action yra link arba callback, priklausomai nuo to, kokio tipo sąveiką norite iškviesti.
  • className yra su operacija susieto mazgo id.
  • reference gali būti URL nuoroda arba atgalinio ryšio funkcijos pavadinimas.
  • (Neprivaloma) patarimas – tai eilutė, rodoma užvedus pelės žymeklį ant elemento.
  • Atgalinio ryšio funkcija bus iškviesta su nodeId kaip parametru.

Pastaba

Galima naudoti note "line1 line2", kad diagramoje pridėtumėte komentarą. Galima naudoti note for <CLASS NAME> "line1 line2", kad pridėtumėte komentarą konkrečiai klasei.

Pavyzdys

Kodas
                            
Kopijuoti
Įterpti
classDiagram note "This is a general note" note for MyClass "This is a note for a class" class MyClass{ }

Interneto nuoroda:

Kodas
                            
Kopijuoti
Įterpti
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"

Konfigūracija

Narių laukas

Galima paslėpti tuščią klasių mazgų narių lauką; tai atliekama pakeitus klasių diagramos konfigūracijos hideEmptyMembersBox reikšmę.

Kodas
                            
Kopijuoti
Įterpti
--- config: class: hideEmptyMembersBox: true --- classDiagram class Duck