Klassediagram
Klassediagrammet er den viktigste byggesteinen i objektorientert modellering. Det brukes til generell begrepsmodellering av applikasjonsstruktur, samt til detaljert modellering som konverterer modellen til programmeringskode. Klassediagrammet kan også brukes til datamodellering. Klassene i et klassediagram representerer både hovedelementene og samspillet i applikasjonen, og de klassene som må programmeres.
Kopier
Bygg inn
---
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()
}
Syntaks
Klasse
UML tilbyr en mekanisme for å representere klassemedlemmer, for eksempel egenskaper og metoder, samt tilleggsinformasjon om dem. En enkelt forekomst av en klasse består av tre deler:
- Den øverste delen inneholder navnet på klassen. Det skrives i fet skrift og sentrert, med stor forbokstav. Den kan også inneholde valgfri kommentartekst som beskriver klassens art.
- Den midterste delen inneholder klassens egenskaper. De er venstrejusterte og begynner med liten bokstav.
- Den nederste delen inneholder operasjonene klassen kan utføre. De er også venstrejusterte og begynner med liten bokstav.
Kopier
Bygg inn
---
title: Bank example
---
classDiagram
class BankAccount
BankAccount : +String owner
BankAccount : +Bigdecimal balance
BankAccount : +deposit(amount)
BankAccount : +withdrawal(amount)
Definer en klasse
Det finnes to måter å definere en klasse på
- Bruk class -syntaksen eksplisitt (som class Animal ), noe som definerer klassen Animal .
- Gjennom en relasjon, som definerer både to klasser og forholdet mellom dem (som Vehicle <|-- Car ).
Kopier
Bygg inn
classDiagram
class Animal
Vehicle <|-- Car
Navneregler: et klassenavn kan bare bestå av alfanumeriske tegn (inkludert unicode), understrek ( _ ) og bindestrek ( - ).
Klasseetikett
Hvis du trenger å gi en klasse en etikett, kan du bruke følgende syntaks:
Kopier
Bygg inn
classDiagram
class Animal["Animal with a label"]
class Car["Car with *! symbols"]
Animal --> Car
Du kan også bruke backtick ( `` ) for å escape spesialtegn i etiketten:
Kopier
Bygg inn
classDiagram
class `Animal Class!`
class `Car Class`
`Animal Class!` --> `Car Class`
Definer medlemmer av en klasse
UML tilbyr en mekanisme for å representere klassemedlemmer (som egenskaper og metoder) samt tilleggsinformasjon om dem.
Mermaid skiller egenskaper fra funksjoner eller metoder basert på om parenteser () finnes. De som har () betraktes som funksjoner eller metoder, og resten betraktes som egenskaper.
Det finnes to måter å definere klassemedlemmer på. Uansett hvilken syntaks som brukes for å definere medlemmet, er resultatet det samme. De to måtene er:
1. Bruk kolon ( : ) etterfulgt av medlemsnavnet for å knytte et medlem til klassen. Dette er nyttig for å definere ett medlem om gangen. For eksempel:
Kopier
Bygg inn
classDiagram
class BankAccount
BankAccount : +String owner
BankAccount : +BigDecimal balance
BankAccount : +deposit(amount)
BankAccount : +withdrawal(amount)
2. Bruk klammer {} for å knytte medlemmer til klassen, der medlemmene grupperes inne i klamrene. Passer for å definere flere medlemmer samtidig. For eksempel:
Kopier
Bygg inn
classDiagram
class BankAccount{
+String owner
+BigDecimal balance
+deposit(amount)
+withdrawal(amount)
}
Returtype
Du kan angi datatypen som skal returneres, på slutten av en metode- eller funksjonsdefinisjon. Merk: det må være et mellomrom mellom den siste ')' og returtypen. Et eksempel:
Kopier
Bygg inn
classDiagram
class BankAccount{
+String owner
+BigDecimal balance
+deposit(amount) bool
+withdrawal(amount) int
}
Generisk type
Generiske typer kan uttrykkes som en del av en klassedefinisjon, og kan også brukes for klassemedlemmer eller returtyper. For å representere et element som en generisk type omslutter du typen med en tilde ( ~ ). Nestede typdeklarasjoner støttes, som List<List<int>> , men generiske typer som inneholder komma, som List<List<K, V>> , støttes for tiden ikke.
Kopier
Bygg inn
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~~
Synlighet
For å beskrive synligheten til en egenskap eller metode/funksjon kan du bruke et valgfritt symbol foran medlemsnavnet:
- + Offentlig
- - Privat
- # Beskyttet
- ~ Intern
Definer relasjoner
Relasjon er et generelt begrep som dekker de bestemte typene logiske forbindelser som finnes i klasse- og objektdiagrammer.
Kopier
Bygg inn
[classA][Arrow][ClassB]
UML为类定义了八种不同类型的关系:
| Type | Beskrivelse |
|---|---|
| <|-- | Arv |
| *-- | Komposisjon |
| o-- | Aggregering |
| --> | Assosiasjon |
| -- | Lenke (hel) |
| ..> | Avhengighet |
| ..|> | Realisering |
| .. | Lenke (stiplet) |
Kopier
Bygg inn
classDiagram
classA <|-- classB
classC *-- classD
classE o-- classF
classG <-- classH
classI -- classJ
classK <.. classL
classM <|.. classN
classO .. classP
Vi kan bruke etiketter til å beskrive arten av forholdet mellom to klasser. I tillegg kan pilen også brukes i motsatt retning:
Kopier
Bygg inn
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)
Relasjonsetikett
Du kan legge til etikettekst på en relasjon:
Kopier
Bygg inn
[classA][Arrow][ClassB]:LabelText
Kopier
Bygg inn
classDiagram
classA <|-- classB : implements
classC *-- classD : composition
classE o-- classF : aggregation
Tosidig relasjon
En tosidig relasjon kan logisk representere en N:M-assosiasjon:
Kopier
Bygg inn
classDiagram
Animal <|--|> Zebra
语法如下:
Kopier
Bygg inn
[Relation Type][Link][Relation Type]
其中 Relation Type 是以下之一:
| Type | Beskrivelse |
|---|---|
| <| | Arv |
| * | Komposisjon |
| o | Aggregering |
| > | Assosiasjon |
| < | Assosiasjon |
| |> | Realisering |
Link er ett av følgende:
| Type | Beskrivelse |
|---|---|
| -- | Hel linje |
| .. | Stiplet linje |
Slikkepinn-grensesnitt
En klasse kan også tildeles en spesiell relasjonstype, som definerer et slikkepinn-grensesnitt for klassen. Slikkepinn-grensesnittet defineres med følgende syntaks:
- bar ()-- foo
- foo --() bar
Grensesnittet med slikkepinn (bar) kobles til klassen (foo).
Merk: hvert definerte grensesnitt er unikt, med den hensikt at det ikke skal deles mellom klasser, og det tillates heller ikke flere koblinger som peker til det.
Kopier
Bygg inn
classDiagram
bar ()-- foo
Kopier
Bygg inn
classDiagram
class Class01 {
int amount
draw()
}
Class01 --() bar
Class02 --() bar
foo ()-- Class01
Definer navnerom
Navnerom grupperer klasser.
Kopier
Bygg inn
classDiagram
namespace BaseShapes {
class Triangle
class Rectangle {
double width
double height
}
}
Relasjonens kardinalitet/multiplicitet
Multiplicitet eller kardinalitet i et klassediagram angir hvor mange forekomster av én klasse som kan assosieres med forekomster av en annen klasse. For eksempel vil hvert selskap ha én eller flere ansatte, aldri null, mens hver ansatt for tiden jobber i null eller ett selskap.
Multiplicitetssymbolet plasseres nær slutten av assosiasjonen.
De ulike kardinalitetsalternativene er:
- 1 bare 1
- 0..1 0 eller 1
- 1..* 1 eller flere
- * 0, 1 eller flere
- n n (der n>1)
- 0..n 0 til n (der n>1)
- 1..n 1 til n (der n>1)
Kardinalitet kan enkelt defineres ved å omslutte tekstalternativet med doble anførselstegn ”“ foran eller etter den gitte pilen. For eksempel:
Kopier
Bygg inn
[classA] "cardinality1" [Arrow] "cardinality2" [ClassB]:LabelText
Kopier
Bygg inn
classDiagram
Customer "1" --> "*" Ticket
Student "1" --> "1..*" Course
Galaxy --> "many" Star : Contains
Klasseannotering
Du kan annotere en klasse ved hjelp av markører for å gi tilleggsmetadata om klassen. Dette kan tydeligere vise klassens art. Noen vanlige annoteringer inkluderer:
- <<Interface>> representerer en grensesnittklasse
- <<Abstract>> representerer en abstrakt klasse
- <<Service>> representerer en tjenesteklasse
- <<Enumeration>> representerer en enumerasjon
Kommentarer defineres i den innledende << og den avsluttende >> . Det finnes tre måter å legge til kommentarer på en klasse, og alle tre gir samme resultat:
- Inline med klassedefinisjonen
Kopier
Bygg inn
classDiagram
class Shape <<interface>>
På en egen linje etter at klassen er definert:
Kopier
Bygg inn
classDiagram
class Shape
<<interface>> Shape
Shape : noOfVertices
Shape : draw()
- I den nestede strukturen til klassedefinisjonen:
Kopier
Bygg inn
classDiagram
class Shape{
<<interface>>
noOfVertices
draw()
}
class Color{
<<enumeration>>
RED
BLUE
GREEN
WHITE
BLACK
}
Kommentar
Du kan skrive kommentarer i et klassediagram, og editoren ignorerer kommentaren. En kommentar må oppta en egen linje og må begynne med to prosenttegn (%%). All tekst frem til neste linje betraktes som en kommentar, inkludert all klassediagram-syntaks.
Kopier
Bygg inn
classDiagram
%% This whole line is a comment classDiagram class Shape <<interface>>
class Shape{
<<interface>>
noOfVertices
draw()
}
Angi retningen til diagrammet
Du kan bruke en retningssetning til å angi renderingsretningen til klassediagrammet:
Kopier
Bygg inn
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
Samspill
Du kan knytte klikkhendelser til noder. En klikkhendelse kan utløse en JavaScript-callback-funksjon, eller åpne en lenke som lastes inn i en ny nettleserfane. Merk: denne funksjonen er deaktivert med securityLevel='strict' og aktivert med securityLevel='loose' .
Du kan definere disse operasjonene på en egen linje etter alle klassedeklarasjonene.
Kopier
Bygg inn
action className "reference" "tooltip"
click className call callback() "tooltip"
click className href "url" "tooltip"
- action er link eller callback , avhengig av hvilken type samhandling du vil utløse.
- className er node-id-en som er knyttet til operasjonen.
- reference kan være en URL-lenke eller navnet på en callback-funksjon.
- (valgfritt) Verktøytipset er en streng som vises når musepekeren holdes over elementet.
- Callback-funksjonen kalles med nodeId som parameter.
Merk
Du kan legge til en kommentar i diagrammet med note "line1 line2" . Du kan legge til en kommentar for en bestemt klasse med note for <CLASS NAME> "line1 line2" .
Eksempel
Kopier
Bygg inn
classDiagram
note "This is a general note"
note for MyClass "This is a note for a class"
class MyClass{
}
Nettadresselenke:
Kopier
Bygg inn
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"
Konfigurasjon
Medlemsboks
Du kan skjule den tomme medlemsboksen til en klassenode. Dette gjøres ved å endre verdien hideEmptyMembersBox i klassediagrammets konfigurasjon.
Kopier
Bygg inn
---
config:
class:
hideEmptyMembersBox: true
---
classDiagram
class Duck