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.
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.
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).
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ę:
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:
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:
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:
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:
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>>.
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ė) |
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:
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
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ą:
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ą.
Kopijuoti
Įterpti
classDiagram
bar ()-- foo
Kopijuoti
Įterpti
classDiagram
class Class01 {
int amount
draw()
}
Class01 --() bar
Class02 --() bar
foo ()-- Class01
Vardų erdvės apibrėžimas
Vardų erdvė grupuoja klases.
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
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:
Kopijuoti
Įterpti
classDiagram
class Shape
<<interface>> Shape
Shape : noOfVertices
Shape : draw()
- Įdėta klasės apibrėžimo struktūroje:
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ę.
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:
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
Kopijuoti
Įterpti
classDiagram
note "This is a general note"
note for MyClass "This is a note for a class"
class MyClass{
}
Interneto nuoroda:
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ę.
Kopijuoti
Įterpti
---
config:
class:
hideEmptyMembersBox: true
---
classDiagram
class Duck