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

KlassediagramSyntaks

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.

Kode
                            
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.
Kode
                            
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 ).
Kode
                            
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:

Kode
                            
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:

Kode
                            
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:

Kode
                            
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:

Kode
                            
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:

Kode
                            
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.

Kode
                            
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)
Kode
                            
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:

Kode
                            
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
Kode
                            
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:

Kode
                            
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.

Kode
                            
Kopier
Bygg inn
classDiagram bar ()-- foo
Kode
                            
Kopier
Bygg inn
classDiagram class Class01 { int amount draw() } Class01 --() bar Class02 --() bar foo ()-- Class01

Definer navnerom

Navnerom grupperer klasser.

Kode
                            
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
Kode
                            
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:

Kode
                            
Kopier
Bygg inn
classDiagram class Shape <<interface>> Shape Shape : noOfVertices Shape : draw()
  • I den nestede strukturen til klassedefinisjonen:
Kode
                            
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.

Kode
                            
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:

Kode
                            
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

Kode
                            
Kopier
Bygg inn
classDiagram note "This is a general note" note for MyClass "This is a note for a class" class MyClass{ }

Nettadresselenke:

Kode
                            
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.

Kode
                            
Kopier
Bygg inn
--- config: class: hideEmptyMembersBox: true --- classDiagram class Duck