Rajah Kelas
Gambar rajah kelas ialah blok binaan utama pemodelan berorientasikan objek. Ia digunakan untuk pemodelan konsep umum struktur aplikasi, serta pemodelan terperinci untuk menukar model kepada kod pengaturcaraan. Gambar rajah kelas juga boleh digunakan untuk pemodelan data. Kelas dalam gambar rajah kelas mewakili kedua-dua elemen utama dan interaksi dalam aplikasi, serta kelas yang perlu diprogramkan.
Salin
Benamkan
---
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()
}
Sintaks
Kelas
UML menyediakan mekanisme untuk mewakili ahli kelas, contohnya sifat dan kaedah, serta maklumat tambahan mengenainya. Satu contoh tunggal kelas mengandungi tiga bahagian:
- Bahagian atas mengandungi nama kelas. Ia dicetak tebal dan di tengah, dengan huruf pertama besar. Ia juga mungkin mengandungi teks komen pilihan yang menerangkan sifat kelas.
- Bahagian tengah mengandungi sifat kelas. Ia dijajar kiri, dan huruf pertamanya kecil.
- Bahagian bawah mengandungi operasi yang boleh dilakukan oleh kelas. Ia juga dijajar kiri, dan huruf pertamanya kecil.
Salin
Benamkan
---
title: Bank example
---
classDiagram
class BankAccount
BankAccount : +String owner
BankAccount : +Bigdecimal balance
BankAccount : +deposit(amount)
BankAccount : +withdrawal(amount)
Tentukan satu kelas
Terdapat dua cara untuk mentakrifkan kelas
- Menggunakan sintaks class secara eksplisit (seperti class Animal), ini akan mentakrifkan kelas Animal.
- Melalui satu hubungan, ia mentakrifkan dua kelas sekali gus serta hubungan antara mereka (seperti Vehicle <|-- Car).
Salin
Benamkan
classDiagram
class Animal
Vehicle <|-- Car
Konvensyen penamaan: nama kelas hanya boleh terdiri daripada aksara abjad angka (termasuk unicode), garis bawah (_) dan sengkang (-).
Label kelas
Jika anda perlu memberikan label untuk kelas, anda boleh menggunakan sintaks berikut:
Salin
Benamkan
classDiagram
class Animal["Animal with a label"]
class Car["Car with *! symbols"]
Animal --> Car
Anda juga boleh menggunakan tanda backtick (``) untuk melepaskan aksara khas dalam label:
Salin
Benamkan
classDiagram
class `Animal Class!`
class `Car Class`
`Animal Class!` --> `Car Class`
Tentukan ahli kelas
UML menyediakan mekanisme untuk mewakili ahli kelas (seperti sifat dan kaedah) serta maklumat tambahan mengenainya.
Mermaid akan membezakan sifat daripada fungsi atau kaedah berdasarkan kewujudan kurungan kecil (). Yang mempunyai () dianggap sebagai fungsi atau kaedah, selebihnya dianggap sebagai sifat.
Terdapat dua cara untuk mentakrifkan ahli kelas; tidak kira sintaks mana yang digunakan untuk mentakrifkan ahli, hasil output adalah sama. Dua cara berbeza itu ialah:
1, Menggunakan titik bertindih (:) diikuti dengan nama ahli untuk mengaitkan ahli kelas; ini berguna untuk mentakrifkan satu ahli pada satu masa. Contohnya:
Salin
Benamkan
classDiagram
class BankAccount
BankAccount : +String owner
BankAccount : +BigDecimal balance
BankAccount : +deposit(amount)
BankAccount : +withdrawal(amount)
2, Menggunakan pendakap besar {} untuk mengaitkan ahli kelas, di mana ahli dikelompokkan dalam pendakap besar. Sesuai untuk mentakrifkan berbilang ahli sekali gus. Contohnya:
Salin
Benamkan
classDiagram
class BankAccount{
+String owner
+BigDecimal balance
+deposit(amount)
+withdrawal(amount)
}
Jenis pulangan
Anda boleh menentukan jenis data yang akan dipulangkan pada penghujung definisi kaedah atau fungsi. Nota: mesti ada satu ruang antara ')' terakhir dan jenis pulangan. Satu contoh:
Salin
Benamkan
classDiagram
class BankAccount{
+String owner
+BigDecimal balance
+deposit(amount) bool
+withdrawal(amount) int
}
Jenis generik
Jenis generik boleh diwakili sebagai sebahagian daripada definisi kelas, dan juga boleh digunakan untuk ahli kelas atau jenis pulangan. Untuk mewakili sesuatu item sebagai jenis generik, apit jenis itu dengan tanda tilde (~). Pengisytiharan jenis bersarang disokong, contohnya List<List<int>>, tetapi jenis generik yang mengandungi koma seperti List<List<K, V>> tidak disokong pada masa ini.
Salin
Benamkan
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~~
Keterlihatan
Untuk menerangkan keterlihatan sifat atau kaedah/fungsi, simbol pilihan boleh digunakan sebelum nama ahli tersebut:
- + Awam
- - Persendirian
- # Terlindung
- ~ Dalaman
Tentukan hubungan
Hubungan ialah istilah umum yang merangkumi jenis sambungan logik tertentu yang terdapat pada gambar rajah kelas dan gambar rajah objek.
Salin
Benamkan
[classA][Arrow][ClassB]
UML为类定义了八种不同类型的关系:
| Jenis | Penerangan |
|---|---|
| <|-- | Pewarisan |
| *-- | Komposisi |
| o-- | Agregasi |
| --> | Perkaitan |
| -- | Pautan (pejal) |
| ..> | Kebergantungan |
| ..|> | Pelaksanaan |
| .. | Pautan (putus-putus) |
Salin
Benamkan
classDiagram
classA <|-- classB
classC *-- classD
classE o-- classF
classG <-- classH
classI -- classJ
classK <.. classL
classM <|.. classN
classO .. classP
Kita boleh menggunakan label untuk menerangkan sifat hubungan antara dua kelas. Selain itu, anak panah juga boleh digunakan secara terbalik:
Salin
Benamkan
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)
Label hubungan
Teks label boleh ditambah pada hubungan:
Salin
Benamkan
[classA][Arrow][ClassB]:LabelText
Salin
Benamkan
classDiagram
classA <|-- classB : implements
classC *-- classD : composition
classE o-- classF : aggregation
Hubungan dua hala
Hubungan dua hala secara logik boleh mewakili perkaitan N:M:
Salin
Benamkan
classDiagram
Animal <|--|> Zebra
语法如下:
Salin
Benamkan
[Relation Type][Link][Relation Type]
其中 Relation Type 是以下之一:
| Jenis | Penerangan |
|---|---|
| <| | Pewarisan |
| * | Komposisi |
| o | Agregasi |
| > | Perkaitan |
| < | Perkaitan |
| |> | Pelaksanaan |
Link ialah salah satu daripada yang berikut:
| Jenis | Penerangan |
|---|---|
| -- | Garisan pejal |
| .. | Garisan putus-putus |
Antara muka lollipop
Kelas juga boleh diberikan satu jenis hubungan khas, yang mentakrifkan antara muka lollipop untuk kelas. Antara muka lollipop ditakrifkan menggunakan sintaks berikut:
- bar ()-- foo
- foo --() bar
Antara muka dengan lollipop (bar) disambung ke kelas (foo).
Nota: setiap antara muka yang ditakrifkan adalah unik, dengan tujuan untuk tidak dikongsi antara kelas, dan tidak membenarkan berbilang sambungan menunjuk kepadanya.
Salin
Benamkan
classDiagram
bar ()-- foo
Salin
Benamkan
classDiagram
class Class01 {
int amount
draw()
}
Class01 --() bar
Class02 --() bar
foo ()-- Class01
Tentukan ruang nama
Ruang nama mengelompokkan kelas.
Salin
Benamkan
classDiagram
namespace BaseShapes {
class Triangle
class Rectangle {
double width
double height
}
}
Kardinaliti/kepelbagaian hubungan
Kepelbagaian atau kardinaliti dalam gambar rajah kelas mewakili bilangan contoh sesuatu kelas yang boleh dikaitkan dengan contoh kelas lain. Contohnya, setiap syarikat mempunyai satu atau lebih pekerja, tidak boleh sifar, manakala setiap pekerja pada masa ini bekerja di sifar atau satu syarikat.
Simbol kepelbagaian diletakkan berhampiran penghujung perkaitan.
Pilihan kardinaliti yang berbeza ialah:
- 1 Hanya 1
- 0..1 0 atau 1
- 1..* 1 atau lebih
- * 0 atau 1 atau lebih
- n n (di mana n>1)
- 0..n 0 hingga n (di mana n>1)
- 1..n 1 hingga n (di mana n>1)
Kardinaliti boleh ditakrifkan dengan mudah dengan mengapit pilihan teks dengan tanda petik berganda "" di hadapan atau belakang anak panah yang diberikan. Contohnya:
Salin
Benamkan
[classA] "cardinality1" [Arrow] "cardinality2" [ClassB]:LabelText
Salin
Benamkan
classDiagram
Customer "1" --> "*" Ticket
Student "1" --> "1..*" Course
Galaxy --> "many" Star : Contains
Komen kelas
Kelas boleh dikomen menggunakan penanda, untuk memberikan metadata tambahan tentang kelas tersebut. Ini boleh menunjukkan sifat kelas dengan lebih jelas. Beberapa komen biasa termasuk:
- <<Interface>> mewakili kelas antara muka
- <<Abstract>> mewakili kelas abstrak
- <<Service>> mewakili kelas perkhidmatan
- <<Enumeration>> mewakili enumerasi
Komen ditakrifkan di antara << di awal dan >> di akhir. Terdapat tiga cara untuk menambah komen pada kelas, dan output bagi ketiga-tiga cara adalah sama:
- Sebaris dengan definisi kelas
Salin
Benamkan
classDiagram
class Shape <<interface>>
Pada baris berasingan selepas mentakrifkan kelas:
Salin
Benamkan
classDiagram
class Shape
<<interface>> Shape
Shape : noOfVertices
Shape : draw()
- Dalam struktur bersarang definisi kelas:
Salin
Benamkan
classDiagram
class Shape{
<<interface>>
noOfVertices
draw()
}
class Color{
<<enumeration>>
RED
BLUE
GREEN
WHITE
BLACK
}
Komen
Komen boleh dimasukkan dalam gambar rajah kelas, dan editor akan mengabaikannya. Komen perlu menduduki satu baris sendiri, dan mesti bermula dengan dua tanda peratus (%%). Semua teks sehingga baris seterusnya akan dianggap sebagai komen, termasuk sebarang sintaks gambar rajah kelas.
Salin
Benamkan
classDiagram
%% This whole line is a comment classDiagram class Shape <<interface>>
class Shape{
<<interface>>
noOfVertices
draw()
}
Tetapkan arah carta
Anda boleh menggunakan pernyataan arah untuk menetapkan arah pemaparan gambar rajah kelas:
Salin
Benamkan
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
Interaksi
Peristiwa klik boleh diikat pada nod. Peristiwa klik boleh mencetuskan fungsi panggil balik JavaScript, atau membuka pautan yang akan dimuatkan dalam tab pelayar baharu. Nota: ciri ini dilumpuhkan apabila menggunakan securityLevel='strict', dan didayakan apabila menggunakan securityLevel='loose'.
Anda boleh mentakrifkan operasi ini pada baris berasingan selepas semua pengisytiharan kelas.
Salin
Benamkan
action className "reference" "tooltip"
click className call callback() "tooltip"
click className href "url" "tooltip"
- action ialah link atau callback, bergantung pada jenis interaksi yang ingin anda panggil.
- className ialah id nod yang dikaitkan dengan operasi.
- reference boleh jadi pautan URL, atau nama fungsi panggil balik.
- (Pilihan) petua alat ialah rentetan yang dipaparkan apabila tetikus melayang di atas elemen.
- Fungsi panggil balik akan dipanggil dengan nodeId sebagai parameter.
Nota
Anda boleh menggunakan note "line1 line2" untuk menambah komen pada carta. Anda boleh menggunakan note for <CLASS NAME> "line1 line2" untuk menambah komen bagi kelas tertentu.
Contoh
Salin
Benamkan
classDiagram
note "This is a general note"
note for MyClass "This is a note for a class"
class MyClass{
}
Pautan URL:
Salin
Benamkan
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"
Konfigurasi
Kotak ahli
Kotak ahli kosong nod kelas boleh disembunyikan, ini dilakukan dengan menukar nilai hideEmptyMembersBox dalam konfigurasi gambar rajah kelas.
Salin
Benamkan
---
config:
class:
hideEmptyMembersBox: true
---
classDiagram
class Duck