Razredni diagram
Razredni diagram je glavni gradnik objektno usmerjenega modeliranja. Uporablja se za splošno konceptualno modeliranje strukture aplikacije in za podrobno modeliranje pretvorbe modela v programsko kodo. Razredni diagram se lahko uporablja tudi za podatkovno modeliranje. Razredi v razrednem diagramu predstavljajo tako glavne elemente in interakcije v aplikaciji kot razrede, ki jih je treba programirati.
Kopiraj
Vdelava
---
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()
}
Sintaksa
Razred
UML ponuja mehanizme za predstavitev članov razreda, na primer lastnosti in metod, ter njihovih dodatnih informacij. Posamezen primerek razreda vsebuje tri dele:
- Zgornji del vsebuje ime razreda. Natisnjeno je krepko in sredinsko poravnano, z veliko začetnico. Lahko vsebuje tudi neobvezno komentarno besedilo, ki opisuje naravo razreda.
- Srednji del vsebuje lastnosti razreda. Poravnane so levo, z malo začetnico.
- Spodnji del vsebuje operacije, ki jih razred lahko izvaja. Tudi te so poravnane levo in z malo začetnico.
Kopiraj
Vdelava
---
title: Bank example
---
classDiagram
class BankAccount
BankAccount : +String owner
BankAccount : +Bigdecimal balance
BankAccount : +deposit(amount)
BankAccount : +withdrawal(amount)
Določitev razreda
Razred lahko definirate na dva načina
- Z izrecno uporabo sintakse class (na primer class Animal), s čimer definirate razred Animal.
- Z relacijo, ki hkrati definira dva razreda in razmerje med njima (na primer Vehicle <|-- Car).
Kopiraj
Vdelava
classDiagram
class Animal
Vehicle <|-- Car
Pravila poimenovanja: ime razreda lahko sestavljajo le alfanumerični znaki (vključno z unicode), podčrtaj (_) in pomišljaj (-).
Oznaka razreda
Če morate razredu dodeliti oznako, lahko uporabite naslednjo sintakso:
Kopiraj
Vdelava
classDiagram
class Animal["Animal with a label"]
class Car["Car with *! symbols"]
Animal --> Car
Za ubežne posebne znake v oznaki lahko uporabite tudi povratna narekovaja (``):
Kopiraj
Vdelava
classDiagram
class `Animal Class!`
class `Car Class`
`Animal Class!` --> `Car Class`
Določitev članov razreda
UML ponuja mehanizme za predstavitev članov razreda (kot so lastnosti in metode) ter dodatnih informacij o njih.
Mermaid razlikuje med lastnostmi in funkcijami ali metodami glede na prisotnost oklepajev (). Tisti z () veljajo za funkcije ali metode, vsi ostali pa za lastnosti.
Člane razreda lahko definirate na dva načina; ne glede na to, katero sintakso uporabite, je rezultat enak. Dva različna načina sta:
1. Povežite člana razreda z dvopičjem (:) in imenom člana; to je uporabno za definiranje enega člana naenkrat. Na primer:
Kopiraj
Vdelava
classDiagram
class BankAccount
BankAccount : +String owner
BankAccount : +BigDecimal balance
BankAccount : +deposit(amount)
BankAccount : +withdrawal(amount)
2. Povežite člane razreda z zavitima oklepajema {}, pri čemer so člani združeni znotraj oklepajev. Primerno za definiranje več članov hkrati. Na primer:
Kopiraj
Vdelava
classDiagram
class BankAccount{
+String owner
+BigDecimal balance
+deposit(amount)
+withdrawal(amount)
}
Povratna vrsta
Na koncu definicije metode ali funkcije lahko določite podatkovno vrsto, ki bo vrnjena. Opomba: med zadnjim ')' in povratno vrsto mora biti presledek. Primer:
Kopiraj
Vdelava
classDiagram
class BankAccount{
+String owner
+BigDecimal balance
+deposit(amount) bool
+withdrawal(amount) int
}
Splošna vrsta
Splošno vrsto je mogoče predstaviti kot del definicije razreda, uporabiti pa jo je mogoče tudi za člane razreda ali povratno vrsto. Če želite element predstaviti kot splošno vrsto, to vrsto ovijte z valovito črto (~). Podprte so gnezdene deklaracije vrst, na primer List<List<int>>, vendar trenutno niso podprte splošne vrste, ki vsebujejo vejico, kot je List<List<K, V>>.
Kopiraj
Vdelava
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~~
Vidnost
Za opis vidnosti lastnosti ali metode/funkcije lahko pred imenom člana uporabite neobvezen simbol:
- + javno
- - zasebno
- # zaščiteno
- ~ notranje
Določitev razmerja
Razmerje je splošen izraz, ki zajema določene vrste logičnih povezav, ki jih najdemo v razrednih in objektnih diagramih.
Kopiraj
Vdelava
[classA][Arrow][ClassB]
UML为类定义了八种不同类型的关系:
| Vrsta | Opis |
|---|---|
| <|-- | Dedovanje |
| *-- | Sestava |
| o-- | Agregacija |
| --> | Asociacija |
| -- | Povezava (polna) |
| ..> | Odvisnost |
| ..|> | Izvedba |
| .. | Povezava (črtkana) |
Kopiraj
Vdelava
classDiagram
classA <|-- classB
classC *-- classD
classE o-- classF
classG <-- classH
classI -- classJ
classK <.. classL
classM <|.. classN
classO .. classP
Z oznakami lahko opišemo naravo razmerja med dvema razredoma. Poleg tega se lahko tudi puščice uporabijo v obratni smeri:
Kopiraj
Vdelava
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)
Oznaka razmerja
Razmerju lahko dodate besedilo oznake:
Kopiraj
Vdelava
[classA][Arrow][ClassB]:LabelText
Kopiraj
Vdelava
classDiagram
classA <|-- classB : implements
classC *-- classD : composition
classE o-- classF : aggregation
Dvosmerno razmerje
Dvosmerno razmerje lahko logično predstavlja povezavo N:M:
Kopiraj
Vdelava
classDiagram
Animal <|--|> Zebra
语法如下:
Kopiraj
Vdelava
[Relation Type][Link][Relation Type]
其中 Relation Type 是以下之一:
| Vrsta | Opis |
|---|---|
| <| | Dedovanje |
| * | Sestava |
| o | Agregacija |
| > | Asociacija |
| < | Asociacija |
| |> | Izvedba |
Link je eden od naslednjih:
| Vrsta | Opis |
|---|---|
| -- | Polna črta |
| .. | Črtkana črta |
Vmesnik lizike
Razredu je mogoče dodeliti tudi posebno vrsto razmerja, ki za razred definira vmesnik lizike. Vmesnik lizike je definiran z naslednjo sintakso:
- bar ()-- foo
- foo --() bar
Vmesnik lizike (bar) je povezan z razredom (foo).
Opomba: vsak definiran vmesnik je edinstven, z namenom, da se ne deli med razredi in da nanj ne kaže več povezav.
Kopiraj
Vdelava
classDiagram
bar ()-- foo
Kopiraj
Vdelava
classDiagram
class Class01 {
int amount
draw()
}
Class01 --() bar
Class02 --() bar
foo ()-- Class01
Določitev imenskega prostora
Imenski prostor združuje razrede.
Kopiraj
Vdelava
classDiagram
namespace BaseShapes {
class Triangle
class Rectangle {
double width
double height
}
}
Kardinalnost/množnost razmerja
Množnost ali kardinalnost v razrednem diagramu označuje, s koliko primerki drugega razreda je lahko povezan primerek enega razreda. Na primer, vsako podjetje ima enega ali več zaposlenih, ne more jih imeti nič, medtem ko je vsak zaposleni trenutno zaposlen v nič ali enem podjetju.
Oznaka množnosti je nameščena blizu konca povezave.
Različne možnosti kardinalnosti so:
- 1 samo 1
- 0..1 0 ali 1
- 1..* 1 ali več
- * 0 ali 1 ali več
- n n (kjer je n>1)
- 0..n 0 do n (kjer je n>1)
- 1..n 1 do n (kjer je n>1)
Kardinalnost lahko preprosto definirate tako, da besedilno možnost ovijete z dvojnimi narekovaji "" pred ali za dano puščico. Na primer:
Kopiraj
Vdelava
[classA] "cardinality1" [Arrow] "cardinality2" [ClassB]:LabelText
Kopiraj
Vdelava
classDiagram
Customer "1" --> "*" Ticket
Student "1" --> "1..*" Course
Galaxy --> "many" Star : Contains
Komentar razreda
Razred lahko komentirate z oznakami, da zagotovite dodatne metapodatke o razredu. To lahko jasneje pokaže naravo razreda. Nekateri pogosti komentarji vključujejo:
- <<Interface>> predstavlja vmesniški razred
- <<Abstract>> predstavlja abstraktni razred
- <<Service>> predstavlja storitveni razred
- <<Enumeration>> predstavlja naštevanje
Komentar je definiran z uvodnima << in zaključnima >>. Razredu lahko dodate komentar na tri načine; rezultat vseh treh načinov je enak:
- Vgrajeno v definicijo razreda
Kopiraj
Vdelava
classDiagram
class Shape <<interface>>
V ločeni vrstici za definicijo razreda:
Kopiraj
Vdelava
classDiagram
class Shape
<<interface>> Shape
Shape : noOfVertices
Shape : draw()
- V gnezdeni strukturi znotraj definicije razreda:
Kopiraj
Vdelava
classDiagram
class Shape{
<<interface>>
noOfVertices
draw()
}
class Color{
<<enumeration>>
RED
BLUE
GREEN
WHITE
BLACK
}
Komentar
V razredni diagram lahko vnesete komentarje, ki jih urejevalnik prezre. Komentar mora zavzemati celotno vrstico in se mora začeti z dvojnim odstotkom (%%). Vse besedilo do naslednje vrstice se obravnava kot komentar, vključno s katero koli sintakso razrednega diagrama.
Kopiraj
Vdelava
classDiagram
%% This whole line is a comment classDiagram class Shape <<interface>>
class Shape{
<<interface>>
noOfVertices
draw()
}
Nastavitev smeri diagrama
S stavkom za smer lahko nastavite smer upodabljanja razrednega diagrama:
Kopiraj
Vdelava
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
Interakcija
Vozlišču lahko priložite dogodek klika. Dogodek klika lahko sproži povratno funkcijo JavaScript ali odpre povezavo, ki se naloži v novem zavihku brskalnika. Opomba: pri securityLevel='strict' je ta funkcija onemogočena, pri securityLevel='loose' pa omogočena.
Te operacije lahko definirate v ločeni vrstici za vsemi deklaracijami razredov.
Kopiraj
Vdelava
action className "reference" "tooltip"
click className call callback() "tooltip"
click className href "url" "tooltip"
- action je link ali callback, odvisno od vrste interakcije, ki jo želite priklicati.
- className je id vozlišča, povezanega z operacijo.
- reference je lahko povezava URL ali ime povratne funkcije.
- (neobvezno) Namig je niz, prikazan, ko miškin kazalec lebdi nad elementom.
- Povratna funkcija bo priklicana s parametrom nodeId.
Opomba
Z note "line1 line2" lahko na diagram dodate komentar. Z note for <CLASS NAME> "line1 line2" lahko dodate komentar določenemu razredu.
Primer
Kopiraj
Vdelava
classDiagram
note "This is a general note"
note for MyClass "This is a note for a class"
class MyClass{
}
Povezava URL:
Kopiraj
Vdelava
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"
Konfiguracija
Polje članov
Skrijete lahko prazno polje članov vozlišča razreda; to storite s spremembo vrednosti hideEmptyMembersBox v konfiguraciji razrednega diagrama.
Kopiraj
Vdelava
---
config:
class:
hideEmptyMembersBox: true
---
classDiagram
class Duck