Luokkakaavio
Luokkakaavio on olio-ohjelmoinnin mallintamisen keskeinen rakennuspalikka. Sitä käytetään sovelluksen rakenteen yleiseen käsitemallinnukseen sekä mallin muuntamiseen ohjelmointikoodiksi yksityiskohtaisessa mallinnuksessa. Luokkakaaviota voidaan käyttää myös tietojen mallintamiseen. Luokkakaavion luokat edustavat sekä sovelluksen keskeisiä elementtejä ja vuorovaikutuksia että ohjelmoitavia luokkia.
Kopioi
Upotus
---
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()
}
Syntaksi
Luokka
UML tarjoaa mekanismeja luokan jäsenten, kuten ominaisuuksien ja metodien, sekä niihin liittyvien lisätietojen esittämiseen. Luokan yksittäinen esiintymä koostuu kolmesta osasta:
- Yläosa sisältää luokan nimen. Se tulostetaan lihavoituna keskelle, ja ensimmäinen kirjain on iso. Se voi sisältää myös valinnaisen kommenttitekstin, joka kuvaa luokan luonnetta.
- Keskiosa sisältää luokan ominaisuudet. Ne tasataan vasemmalle ja ensimmäinen kirjain on pieni.
- Alaosa sisältää toiminnot, jotka luokka voi suorittaa. Ne on myös tasattu vasemmalle ja ensimmäinen kirjain on pieni.
Kopioi
Upotus
---
title: Bank example
---
classDiagram
class BankAccount
BankAccount : +String owner
BankAccount : +Bigdecimal balance
BankAccount : +deposit(amount)
BankAccount : +withdrawal(amount)
Määritä luokka
Luokan voi määrittää kahdella tavalla
- Käytä eksplisiittisesti class-syntaksia (kuten class Animal), mikä määrittelee Animal-luokan.
- Yhteyden kautta, joka määrittelee samanaikaisesti kaksi luokkaa ja niiden välisen suhteen (kuten Vehicle <|-- Car).
Kopioi
Upotus
classDiagram
class Animal
Vehicle <|-- Car
Nimeämiskäytäntö: luokan nimi voi koostua vain aakkosnumeerisista merkeistä (mukaan lukien unicode), alaviivasta (_) ja viivasta (-).
Luokan merkintä
Jos haluat antaa luokalle merkinnän, voit käyttää seuraavaa syntaksia:
Kopioi
Upotus
classDiagram
class Animal["Animal with a label"]
class Car["Car with *! symbols"]
Animal --> Car
Voit myös käyttää takakenoviivoja (``) escape-merkitäksesi merkinnän erikoismerkit:
Kopioi
Upotus
classDiagram
class `Animal Class!`
class `Car Class`
`Animal Class!` --> `Car Class`
Määritä luokan jäsenet
UML tarjoaa mekanismeja luokan jäsenten (kuten ominaisuuksien ja metodien) sekä niitä koskevien lisätietojen esittämiseen.
Mermaid erottaa ominaisuudet funktioista tai metodeista sen perusteella, onko sulkeet () olemassa. Ne, joissa on (), katsotaan funktioiksi tai metodeiksi, ja loput katsotaan ominaisuuksiksi.
Luokan jäsenet voidaan määrittää kahdella tavalla; riippumatta siitä, kumpaa syntaksia jäsenten määrittämiseen käytetään, tulos on sama. Nämä kaksi erilaista tapaa ovat:
1. Liitä luokan jäsen käyttämällä kaksoispistettä (:) ja sen perään jäsenen nimeä; tämä on hyödyllistä yhden jäsenen määrittämiseen kerrallaan. Esimerkiksi:
Kopioi
Upotus
classDiagram
class BankAccount
BankAccount : +String owner
BankAccount : +BigDecimal balance
BankAccount : +deposit(amount)
BankAccount : +withdrawal(amount)
2. Liitä luokan jäsenet käyttämällä aaltosulkeita {}, jolloin jäsenet ryhmitellään aaltosulkeiden sisään. Sopii useiden jäsenten määrittämiseen kerralla. Esimerkiksi:
Kopioi
Upotus
classDiagram
class BankAccount{
+String owner
+BigDecimal balance
+deposit(amount)
+withdrawal(amount)
}
Paluutyyppi
Voit määrittää palautettavan tietotyypin metodin tai funktion määrittelyn lopussa. Huomautus: viimeisen ')' ja paluutyypin välissä on oltava välilyönti. Esimerkki:
Kopioi
Upotus
classDiagram
class BankAccount{
+String owner
+BigDecimal balance
+deposit(amount) bool
+withdrawal(amount) int
}
Yleinen tyyppi
Yleinen tyyppi voidaan esittää osana luokan määrittelyä, ja sitä voidaan käyttää myös luokan jäsenissä tai paluutyypeissä. Esittääksesi kohteen yleisenä tyyppinä, sulje tyyppi aaltoviivojen (~) sisään. Sisäkkäiset tyyppimäärittelyt, kuten List<List<int>>, ovat tuettuja, mutta yleisiä tyyppejä, jotka sisältävät pilkun, kuten List<List<K, V>>, ei tällä hetkellä tueta.
Kopioi
Upotus
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~~
Näkyvyys
Ominaisuuden tai metodin/funktion näkyvyyden kuvaamiseksi voit käyttää valinnaista symbolia jäsenen nimen edessä:
- + julkinen
- - yksityinen
- # suojattu
- ~ sisäinen
Määritä suhde
Suhde on yleistermi, joka kattaa luokka- ja objektikaavioissa esiintyvät tietyntyyppiset loogiset yhteydet.
Kopioi
Upotus
[classA][Arrow][ClassB]
UML为类定义了八种不同类型的关系:
| Tyyppi | Kuvaus |
|---|---|
| <|-- | Perintä |
| *-- | Kokoonpano |
| o-- | Kooste |
| --> | Assosiaatio |
| -- | Linkki (yhtenäinen) |
| ..> | Riippuvuus |
| ..|> | Toteutus |
| .. | Linkki (katkoviiva) |
Kopioi
Upotus
classDiagram
classA <|-- classB
classC *-- classD
classE o-- classF
classG <-- classH
classI -- classJ
classK <.. classL
classM <|.. classN
classO .. classP
Voimme käyttää merkintöjä kuvaamaan kahden luokan välisen suhteen luonteen. Lisäksi nuolta voidaan käyttää myös käänteisesti:
Kopioi
Upotus
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)
Suhteen merkintä
Suhteelle voidaan lisätä merkintäteksti:
Kopioi
Upotus
[classA][Arrow][ClassB]:LabelText
Kopioi
Upotus
classDiagram
classA <|-- classB : implements
classC *-- classD : composition
classE o-- classF : aggregation
Kaksisuuntainen suhde
Kaksisuuntainen suhde voi loogisesti edustaa N:M-assosiaatiota:
Kopioi
Upotus
classDiagram
Animal <|--|> Zebra
语法如下:
Kopioi
Upotus
[Relation Type][Link][Relation Type]
其中 Relation Type 是以下之一:
| Tyyppi | Kuvaus |
|---|---|
| <| | Perintä |
| * | Kokoonpano |
| o | Kooste |
| > | Assosiaatio |
| < | Assosiaatio |
| |> | Toteutus |
Link on yksi seuraavista:
| Tyyppi | Kuvaus |
|---|---|
| -- | Yhtenäinen viiva |
| .. | Katkoviiva |
Tikkukaramelli-rajapinta
Luokalle voidaan myös antaa erityinen suhdetyyppi, joka määrittelee luokalle tikkukaramelli-rajapinnan. Tikkukaramelli-rajapinta määritellään seuraavalla syntaksilla:
- bar ()-- foo
- foo --() bar
Rajapinta, jossa on tikkukaramelli (bar), yhdistetään luokkaan (foo).
Huomautus: jokainen määritetty rajapinta on ainutlaatuinen, eikä sitä ole tarkoitus jakaa luokkien välillä eikä sallia useiden yhteyksien osoittaa siihen.
Kopioi
Upotus
classDiagram
bar ()-- foo
Kopioi
Upotus
classDiagram
class Class01 {
int amount
draw()
}
Class01 --() bar
Class02 --() bar
foo ()-- Class01
Määritä nimiavaruus
Nimiavaruus ryhmittelee luokkia.
Kopioi
Upotus
classDiagram
namespace BaseShapes {
class Triangle
class Rectangle {
double width
double height
}
}
Suhteen kardinaliteetti/monikertaisuus
Monikertaisuus eli kardinaliteetti luokkakaaviossa ilmaisee, kuinka monta luokan esiintymää voidaan liittää toisen luokan esiintymään. Esimerkiksi jokaisella yrityksellä on yksi tai useampi työntekijä, ei koskaan nolla, ja jokainen työntekijä työskentelee tällä hetkellä nollassa tai yhdessä yrityksessä.
Monikertaisuussymboli sijoitetaan assosiaation lopun lähelle.
Erilaiset kardinaliteettivaihtoehdot ovat:
- 1 vain 1
- 0..1 0 tai 1
- 1..* 1 tai useampi
- * 0 tai 1 tai useampi
- n n (jossa n>1)
- 0..n 0:sta n:ään (jossa n>1)
- 1..n 1:stä n:ään (jossa n>1)
Kardinaliteetti voidaan määrittää helposti sulkemalla tekstivaihtoehto lainausmerkkeihin ”“ tietyn nuolen eteen tai taakse. Esimerkiksi:
Kopioi
Upotus
[classA] "cardinality1" [Arrow] "cardinality2" [ClassB]:LabelText
Kopioi
Upotus
classDiagram
Customer "1" --> "*" Ticket
Student "1" --> "1..*" Course
Galaxy --> "many" Star : Contains
Luokan kommentti
Luokka voidaan kommentoida merkinnöillä, jotka tarjoavat lisämetatietoja luokasta. Tämä voi tehdä luokan luonteen selkeämmäksi. Joitakin yleisiä kommentteja ovat:
- <<Interface>> edustaa rajapintaluokkaa
- <<Abstract>> edustaa abstraktia luokkaa
- <<Service>> edustaa palveluluokkaa
- <<Enumeration>> edustaa luettelotyyppiä
Kommentti määritellään alun << ja lopun >> välissä. Luokkaan voidaan lisätä kommentti kolmella tavalla, ja kaikkien kolmen tavan tuloste on sama:
- Sisäkkäin luokan määrittelyn kanssa
Kopioi
Upotus
classDiagram
class Shape <<interface>>
Omalla rivillä luokan määrittelyn jälkeen:
Kopioi
Upotus
classDiagram
class Shape
<<interface>> Shape
Shape : noOfVertices
Shape : draw()
- Luokan määrittelyn sisäkkäisessä rakenteessa:
Kopioi
Upotus
classDiagram
class Shape{
<<interface>>
noOfVertices
draw()
}
class Color{
<<enumeration>>
RED
BLUE
GREEN
WHITE
BLACK
}
Kommentti
Luokkakaavioon voi syöttää kommentteja, jotka editori jättää huomiotta. Kommentin on oltava omalla rivillään ja alettava kaksoisprosenttimerkillä (%%). Kaikki teksti seuraavaan riviin asti tulkitaan kommentiksi, mukaan lukien mahdollinen luokkakaaviosyntaksi.
Kopioi
Upotus
classDiagram
%% This whole line is a comment classDiagram class Shape <<interface>>
class Shape{
<<interface>>
noOfVertices
draw()
}
Aseta kaavion suunta
Voit asettaa luokkakaavion renderöintisuunnan suuntalauseella:
Kopioi
Upotus
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
Vuorovaikutus
Solmuun voi sitoa napsautustapahtuman. Napsautustapahtuma voi laukaista JavaScript-takaisinkutsufunktion tai avata linkin, joka ladataan uudessa selainvälilehdessä. Huomautus: tämä toiminto on poistettu käytöstä, kun käytetään securityLevel='strict', ja otettu käyttöön, kun käytetään securityLevel='loose'.
Voit määrittää nämä toiminnot omalla rivillään kaikkien luokkamäärittelyjen jälkeen.
Kopioi
Upotus
action className "reference" "tooltip"
click className call callback() "tooltip"
click className href "url" "tooltip"
- action on link tai callback riippuen siitä, minkä tyyppisen vuorovaikutuksen haluat kutsua.
- className on toimintoon liitetyn solmun id.
- reference voi olla URL-linkki tai takaisinkutsufunktion nimi.
- (valinnainen) Työkaluvihje on merkkijono, joka näytetään, kun hiiri viedään elementin päälle.
- Takaisinkutsufunktio kutsutaan nodeId-parametrilla.
Huomautus
Kaavioon voidaan lisätä kommentti komennolla note "line1 line2". Tietylle luokalle voidaan lisätä kommentti komennolla note for <CLASS NAME> "line1 line2".
Esimerkki
Kopioi
Upotus
classDiagram
note "This is a general note"
note for MyClass "This is a note for a class"
class MyClass{
}
Verkko-osoitelinkki:
Kopioi
Upotus
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"
Kokoonpano
Jäsenlaatikko
Luokkasolmun tyhjä jäsenlaatikko voidaan piilottaa muuttamalla luokkakaavion kokoonpanon hideEmptyMembersBox-arvoa.
Kopioi
Upotus
---
config:
class:
hideEmptyMembersBox: true
---
classDiagram
class Duck