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

KlassdiagramSyntax

Klassdiagram

Klassdiagram är den främsta byggstenen inom objektorienterad modellering. Det används för allmän begreppsmodellering av applikationsstruktur samt för detaljerad modellering som omvandlar modellen till programmeringskod. Klassdiagram kan också användas för datamodellering. Klasser i ett klassdiagram representerar både de viktigaste elementen och interaktionerna i applikationen samt de klasser som behöver programmeras.

Kod
                            
Kopiera
Bädda in
--- 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() }

Syntax

Klass

UML tillhandahåller mekanismer för att representera klassmedlemmar, såsom egenskaper och metoder, samt tillhörande information. En enskild instans av en klass innehåller tre delar:

  • Överst finns klassens namn. Det skrivs ut i fetstil och centrerat, med stor begynnelsebokstav. Det kan också innehålla valfri kommentarstext som beskriver klassens karaktär.
  • I mitten finns klassens egenskaper. De är vänsterjusterade och börjar med liten bokstav.
  • Längst ned finns de operationer som klassen kan utföra. De är också vänsterjusterade och börjar med liten bokstav.
Kod
                            
Kopiera
Bädda in
--- title: Bank example --- classDiagram class BankAccount BankAccount : +String owner BankAccount : +Bigdecimal balance BankAccount : +deposit(amount) BankAccount : +withdrawal(amount)

Definiera en klass

Det finns två sätt att definiera en klass

  • Använd explicit klassyntax (som class Animal ), vilket definierar klassen Animal.
  • Genom en relation, vilket samtidigt definierar två klasser och relationen mellan dem (som Vehicle <|-- Car ).
Kod
                            
Kopiera
Bädda in
classDiagram class Animal Vehicle <|-- Car

Namnregler: ett klassnamn får endast bestå av alfanumeriska tecken (inklusive unicode), understreck (_) och bindestreck (-).

Klassetikett

Om du behöver ange en etikett för en klass kan du använda följande syntax:

Kod
                            
Kopiera
Bädda in
classDiagram class Animal["Animal with a label"] class Car["Car with *! symbols"] Animal --> Car

Du kan också använda backticks (``) för att undvika specialtecken i etiketten:

Kod
                            
Kopiera
Bädda in
classDiagram class `Animal Class!` class `Car Class` `Animal Class!` --> `Car Class`

Definiera klassens medlemmar

UML tillhandahåller mekanismer för att representera klassmedlemmar (såsom egenskaper och metoder) samt tillhörande information om dem.

Mermaid skiljer egenskaper från funktioner eller metoder beroende på om parenteser () finns. De med () betraktas som funktioner eller metoder, resten betraktas som egenskaper.

Det finns två sätt att definiera klassens medlemmar; oavsett vilken syntax som används för att definiera medlemmarna blir resultatet detsamma. De två olika sätten är:

1. Använd ett kolon (:) följt av medlemsnamnet för att associera en klassmedlem; detta är användbart för att definiera en medlem i taget. Till exempel:

Kod
                            
Kopiera
Bädda in
classDiagram class BankAccount BankAccount : +String owner BankAccount : +BigDecimal balance BankAccount : +deposit(amount) BankAccount : +withdrawal(amount)

2. Använd klammerparenteser {} för att associera klassmedlemmar, där medlemmarna grupperas inom klammerparenteserna. Lämpligt för att definiera flera medlemmar på en gång. Till exempel:

Kod
                            
Kopiera
Bädda in
classDiagram class BankAccount{ +String owner +BigDecimal balance +deposit(amount) +withdrawal(amount) }

Returtyp

Du kan ange vilken datatyp som ska returneras i slutet av en metod- eller funktionsdefinition. Obs: det måste finnas ett mellanslag mellan den sista ')' och returtypen. Ett exempel:

Kod
                            
Kopiera
Bädda in
classDiagram class BankAccount{ +String owner +BigDecimal balance +deposit(amount) bool +withdrawal(amount) int }

Generisk typ

Generiska typer kan representeras som en del av en klassdefinition och kan också användas för klassmedlemmar eller returtyper. För att representera ett objekt som en generisk typ, omge typen med tilde (~). Nästlade typdeklarationer stöds, till exempel List<List<int>> , men generiska typer som innehåller kommatecken, som List<List<K, V>> , stöds för närvarande inte.

Kod
                            
Kopiera
Bädda in
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

För att beskriva synligheten för en egenskap eller metod/funktion kan en valfri symbol användas före medlemsnamnet:

  • + Offentlig
  • - Privat
  • # Skyddad
  • ~ Intern

Definiera relationer

Relation är en allmän term som omfattar specifika typer av logiska kopplingar som finns i klassdiagram och objektdiagram.

                            
Kopiera
Bädda in
[classA][Arrow][ClassB]

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

Typ Beskrivning
<|-- Arv
*-- Komposition
o-- Aggregering
--> Association
-- Länk (fylld)
..> Beroende
..|> Implementering
.. Länk (streckad)
Kod
                            
Kopiera
Bädda in
classDiagram classA <|-- classB classC *-- classD classE o-- classF classG <-- classH classI -- classJ classK <.. classL classM <|.. classN classO .. classP

Vi kan använda etiketter för att beskriva karaktären hos relationen mellan två klasser. Dessutom kan pilen också användas i omvänd riktning:

Kod
                            
Kopiera
Bädda in
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)

Relationsetikett

Du kan lägga till etikettext till en relation:

                            
Kopiera
Bädda in
[classA][Arrow][ClassB]:LabelText
Kod
                            
Kopiera
Bädda in
classDiagram classA <|-- classB : implements classC *-- classD : composition classE o-- classF : aggregation

Dubbelriktad relation

En dubbelriktad relation kan logiskt representera en N:M-association:

Kod
                            
Kopiera
Bädda in
classDiagram Animal <|--|> Zebra

语法如下:

                            
Kopiera
Bädda in
[Relation Type][Link][Relation Type]

其中 Relation Type 是以下之一:

Typ Beskrivning
<| Arv
* Komposition
o Aggregering
> Association
< Association
|> Implementering

Link är en av följande:

Typ Beskrivning
-- Heldragen linje
.. Streckad linje

Klubba-gränssnitt

En klass kan också tilldelas en speciell relationstyp som definierar ett klubba-gränssnitt för klassen. Klubba-gränssnittet definieras med följande syntax:

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

Gränssnittet med klubban (bar) ansluts till klassen (foo).

Obs: varje definierat gränssnitt är unikt, i syfte att inte delas mellan klasser och inte tillåta flera anslutningar till det.

Kod
                            
Kopiera
Bädda in
classDiagram bar ()-- foo
Kod
                            
Kopiera
Bädda in
classDiagram class Class01 { int amount draw() } Class01 --() bar Class02 --() bar foo ()-- Class01

Definiera namnrymd

Namnrymder grupperar klasser.

Kod
                            
Kopiera
Bädda in
classDiagram namespace BaseShapes { class Triangle class Rectangle { double width double height } }

Relationsmultiplicitet/kardinalitet

Multiplicitet eller kardinalitet i ett klassdiagram anger hur många instanser av en klass som kan associeras med instanser av en annan klass. Till exempel har varje företag en eller flera anställda, inte noll, medan varje anställd för närvarande arbetar på noll eller ett företag.

Multiplicitetssymbolen placeras nära slutet av associationen.

De olika kardinalitetsalternativen är:

  • 1 endast 1
  • 0..1 0 eller 1
  • 1..* 1 eller flera
  • * 0 eller 1 eller flera
  • n n (där n>1)
  • 0..n 0 till n (där n>1)
  • 1..n 1 till n (där n>1)

Kardinalitet kan enkelt definieras genom att omge textalternativet med dubbla citattecken ”“ före eller efter en given pil. Till exempel:

                            
Kopiera
Bädda in
[classA] "cardinality1" [Arrow] "cardinality2" [ClassB]:LabelText
Kod
                            
Kopiera
Bädda in
classDiagram Customer "1" --> "*" Ticket Student "1" --> "1..*" Course Galaxy --> "many" Star : Contains

Klassannotering

Klasser kan annoteras med markörer för att tillhandahålla ytterligare metadata om klassen. Detta kan tydligare visa klassens karaktär. Några vanliga annoteringar inkluderar:

  • <<Interface>> representerar en gränssnittsklass
  • <<Abstract>> representerar en abstrakt klass
  • <<Service>> representerar en tjänsteklass
  • <<Enumeration>> representerar en uppräkning

Kommentarer definieras mellan inledande << och avslutande >>. Det finns tre sätt att lägga till kommentarer till en klass, och alla tre ger samma resultat:

  • Infogat med klassdefinitionen
                            
Kopiera
Bädda in
classDiagram class Shape <<interface>>

På en separat rad efter att klassen definierats:

Kod
                            
Kopiera
Bädda in
classDiagram class Shape <<interface>> Shape Shape : noOfVertices Shape : draw()
  • I en nästlad struktur i klassdefinitionen:
Kod
                            
Kopiera
Bädda in
classDiagram class Shape{ <<interface>> noOfVertices draw() } class Color{ <<enumeration>> RED BLUE GREEN WHITE BLACK }

Kommentar

Du kan infoga kommentarer i ett klassdiagram, och redigeraren ignorerar kommentaren. En kommentar måste uppta en egen rad och börja med två procenttecken (%%). All text fram till nästa rad betraktas som en kommentar, inklusive all klassdiagram-syntax.

Kod
                            
Kopiera
Bädda in
classDiagram %% This whole line is a comment classDiagram class Shape <<interface>> class Shape{ <<interface>> noOfVertices draw() }

Ange diagrammets riktning

Du kan använda en riktningssats för att ange klassdiagrammets renderingsriktning:

Kod
                            
Kopiera
Bädda in
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

Interaktion

Du kan binda klickhändelser till noder. Klickhändelser kan utlösa JavaScript-callback-funktioner eller öppna en länk som läses in i en ny webbläsarflik. Obs: denna funktion är inaktiverad med securityLevel='strict' och aktiverad med securityLevel='loose'.

Du kan definiera dessa åtgärder på en separat rad efter alla klassdeklarationer.

                            
Kopiera
Bädda in
action className "reference" "tooltip" click className call callback() "tooltip" click className href "url" "tooltip"
  • action är link eller callback, beroende på vilken typ av interaktion du vill anropa.
  • className är det nod-id som är associerat med åtgärden.
  • reference kan vara en URL-länk eller namnet på en callback-funktion.
  • (Valfritt) verktygstipset är en sträng som visas när muspekaren hålls över ett element.
  • Callback-funktionen anropas med nodeId som parameter.

Obs

Du kan lägga till en kommentar på diagrammet med note "line1 line2" . Du kan lägga till en kommentar för en specifik klass med note for <CLASS NAME> "line1 line2" .

Exempel

Kod
                            
Kopiera
Bädda in
classDiagram note "This is a general note" note for MyClass "This is a note for a class" class MyClass{ }

Webbadresslänk:

Kod
                            
Kopiera
Bädda in
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"

Konfiguration

Medlemsruta

Du kan dölja den tomma medlemsrutan för en klassnod; detta görs genom att ändra värdet hideEmptyMembersBox i klassdiagrammets konfiguration.

Kod
                            
Kopiera
Bädda in
--- config: class: hideEmptyMembersBox: true --- classDiagram class Duck