Quy Trình Loại
Biểu thức đồ họa
Suy Nghĩ Loại
Biểu thức có cấu trúc
Ghi Chú Loại
Biểu thức hiệu quả

Biểu đồ lớpCú pháp

Biểu đồ lớp

Biểu đồ lớp là khối xây dựng chính của mô hình hóa hướng đối tượng. Nó được dùng để mô hình hóa khái niệm chung về cấu trúc ứng dụng, cũng như mô hình hóa chi tiết để chuyển mô hình thành mã lập trình. Biểu đồ lớp cũng có thể được dùng để mô hình hóa dữ liệu. Lớp trong biểu đồ lớp vừa biểu diễn các phần tử chính và tương tác trong ứng dụng, vừa biểu diễn các lớp cần được lập trình.

Mã
                            
Sao chép
Nhúng
--- 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() }

Cú pháp

Lớp

UML cung cấp cơ chế biểu diễn các thành viên của lớp, ví dụ thuộc tính và phương thức, cùng thông tin bổ sung của chúng. Một thực thể đơn lẻ của lớp bao gồm ba phần:

  • Phần trên cùng chứa tên của lớp. Nó được in đậm, căn giữa, chữ cái đầu viết hoa. Nó cũng có thể chứa văn bản chú thích tùy chọn mô tả bản chất của lớp.
  • Phần giữa chứa các thuộc tính của lớp. Chúng được căn lề trái, và chữ cái đầu viết thường.
  • Phần dưới cùng chứa các thao tác mà lớp có thể thực hiện. Chúng cũng được căn lề trái, và chữ cái đầu viết thường.
Mã
                            
Sao chép
Nhúng
--- title: Bank example --- classDiagram class BankAccount BankAccount : +String owner BankAccount : +Bigdecimal balance BankAccount : +deposit(amount) BankAccount : +withdrawal(amount)

Định nghĩa một lớp

Có hai cách để định nghĩa lớp

  • Sử dụng tường minh cú pháp class (như class Animal), thao tác này sẽ định nghĩa lớp Animal.
  • Thông qua một quan hệ, nó đồng thời định nghĩa hai lớp và quan hệ giữa chúng (như Vehicle <|-- Car).
Mã
                            
Sao chép
Nhúng
classDiagram class Animal Vehicle <|-- Car

Quy tắc đặt tên: tên lớp chỉ được tạo thành từ các ký tự chữ và số (bao gồm unicode), dấu gạch dưới (_) và dấu gạch ngang (-).

Nhãn của lớp

Nếu bạn cần cung cấp nhãn cho lớp, có thể dùng cú pháp sau:

Mã
                            
Sao chép
Nhúng
classDiagram class Animal["Animal with a label"] class Car["Car with *! symbols"] Animal --> Car

Bạn cũng có thể dùng dấu nháy ngược (``) để thoát các ký tự đặc biệt trong nhãn:

Mã
                            
Sao chép
Nhúng
classDiagram class `Animal Class!` class `Car Class` `Animal Class!` --> `Car Class`

Định nghĩa thành viên của lớp

UML cung cấp cơ chế biểu diễn các thành viên của lớp (như thuộc tính và phương thức) cùng thông tin bổ sung về chúng.

Mermaid sẽ phân biệt thuộc tính với hàm hoặc phương thức dựa trên việc có dấu ngoặc đơn () hay không. Những mục có () được coi là hàm hoặc phương thức, còn lại đều được coi là thuộc tính.

Có hai cách để định nghĩa thành viên của lớp, dù dùng cú pháp nào để định nghĩa thành viên thì kết quả đầu ra cũng giống nhau. Hai cách khác nhau là:

1. Dùng dấu hai chấm (:) theo sau là tên thành viên để liên kết thành viên của lớp, cách này rất hữu ích khi định nghĩa một thành viên tại một thời điểm. Ví dụ:

Mã
                            
Sao chép
Nhúng
classDiagram class BankAccount BankAccount : +String owner BankAccount : +BigDecimal balance BankAccount : +deposit(amount) BankAccount : +withdrawal(amount)

2. Dùng dấu ngoặc nhọn {} để liên kết thành viên của lớp, trong đó các thành viên được nhóm trong dấu ngoặc nhọn. Phù hợp để định nghĩa nhiều thành viên cùng lúc. Ví dụ:

Mã
                            
Sao chép
Nhúng
classDiagram class BankAccount{ +String owner +BigDecimal balance +deposit(amount) +withdrawal(amount) }

Kiểu trả về

Bạn có thể chỉ định kiểu dữ liệu sẽ trả về ở cuối định nghĩa phương thức hoặc hàm. Lưu ý: giữa dấu ')' cuối cùng và kiểu trả về phải có một dấu cách. Một ví dụ:

Mã
                            
Sao chép
Nhúng
classDiagram class BankAccount{ +String owner +BigDecimal balance +deposit(amount) bool +withdrawal(amount) int }

Kiểu tổng quát

Kiểu tổng quát có thể được biểu diễn như một phần của định nghĩa lớp, cũng có thể dùng cho thành viên lớp hoặc kiểu trả về. Để biểu diễn một mục là kiểu tổng quát, hãy bao kiểu đó bằng dấu ngã (~). Hỗ trợ khai báo kiểu lồng nhau, ví dụ List<List<int>>, nhưng hiện chưa hỗ trợ kiểu tổng quát chứa dấu phẩy, như List<List<K, V>>.

Mã
                            
Sao chép
Nhúng
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~~

Khả năng hiển thị

Để mô tả khả năng hiển thị của thuộc tính hoặc phương thức/hàm, có thể dùng ký hiệu tùy chọn trước tên thành viên đó:

  • + Công khai
  • - Riêng tư
  • # Được bảo vệ
  • ~ Nội bộ

Định nghĩa quan hệ

Quan hệ là một thuật ngữ tổng quát, bao gồm các loại liên kết logic cụ thể được tìm thấy trên biểu đồ lớp và biểu đồ đối tượng.

                            
Sao chép
Nhúng
[classA][Arrow][ClassB]

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

Loại Mô tả
<|-- Kế thừa
*-- Thành phần
o-- Tổng hợp
--> Liên kết
-- Liên kết (đặc)
..> Phụ thuộc
..|> Triển khai
.. Liên kết (nét đứt)
Mã
                            
Sao chép
Nhúng
classDiagram classA <|-- classB classC *-- classD classE o-- classF classG <-- classH classI -- classJ classK <.. classL classM <|.. classN classO .. classP

Chúng ta có thể dùng nhãn để mô tả bản chất quan hệ giữa hai lớp. Ngoài ra, mũi tên cũng có thể được dùng theo chiều ngược lại:

Mã
                            
Sao chép
Nhúng
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)

Nhãn quan hệ

Có thể thêm văn bản nhãn cho quan hệ:

                            
Sao chép
Nhúng
[classA][Arrow][ClassB]:LabelText
Mã
                            
Sao chép
Nhúng
classDiagram classA <|-- classB : implements classC *-- classD : composition classE o-- classF : aggregation

Quan hệ hai chiều

Quan hệ hai chiều về mặt logic có thể biểu diễn liên kết N:M:

Mã
                            
Sao chép
Nhúng
classDiagram Animal <|--|> Zebra

语法如下:

                            
Sao chép
Nhúng
[Relation Type][Link][Relation Type]

其中 Relation Type 是以下之一:

Loại Mô tả
<| Kế thừa
* Thành phần
o Tổng hợp
> Liên kết
< Liên kết
|> Triển khai

Link là một trong các loại sau:

Loại Mô tả
-- Nét liền
.. Nét đứt

Giao diện kẹo mút

Lớp còn có thể được gán một loại quan hệ đặc biệt, loại này định nghĩa một giao diện kẹo mút cho lớp. Giao diện kẹo mút được định nghĩa bằng cú pháp sau:

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

Giao diện có kẹo mút (bar) được kết nối với lớp (foo).

Lưu ý: mỗi giao diện được định nghĩa là duy nhất, nhằm mục đích không chia sẻ giữa các lớp và cũng không cho phép nhiều kết nối trỏ tới nó.

Mã
                            
Sao chép
Nhúng
classDiagram bar ()-- foo
Mã
                            
Sao chép
Nhúng
classDiagram class Class01 { int amount draw() } Class01 --() bar Class02 --() bar foo ()-- Class01

Định nghĩa không gian tên

Không gian tên nhóm các lớp lại với nhau.

Mã
                            
Sao chép
Nhúng
classDiagram namespace BaseShapes { class Triangle class Rectangle { double width double height } }

Bản số/Đa bội của quan hệ

Đa bội hay bản số trong biểu đồ lớp biểu thị số lượng thực thể của một lớp có thể liên kết với thực thể của một lớp khác. Ví dụ, mỗi công ty sẽ có một hoặc nhiều nhân viên, không thể là không, còn mỗi nhân viên hiện làm việc tại không hoặc một công ty.

Ký hiệu đa bội được đặt gần cuối của liên kết.

Các tùy chọn bản số khác nhau là:

  • 1 chỉ có 1
  • 0..1 0 hoặc 1
  • 1..* 1 hoặc nhiều
  • * 0 hoặc 1 hoặc nhiều
  • n n (trong đó n>1)
  • 0..n 0 đến n (trong đó n>1)
  • 1..n 1 đến n (trong đó n>1)

Bản số có thể được định nghĩa dễ dàng bằng cách bao tùy chọn văn bản bằng dấu ngoặc kép "" ở trước hoặc sau mũi tên đã cho. Ví dụ:

                            
Sao chép
Nhúng
[classA] "cardinality1" [Arrow] "cardinality2" [ClassB]:LabelText
Mã
                            
Sao chép
Nhúng
classDiagram Customer "1" --> "*" Ticket Student "1" --> "1..*" Course Galaxy --> "many" Star : Contains

Chú thích của lớp

Có thể dùng ký hiệu để chú thích lớp, nhằm cung cấp siêu dữ liệu bổ sung về lớp đó. Điều này giúp thể hiện rõ hơn bản chất của lớp. Một số chú thích phổ biến bao gồm:

  • <<Interface>> biểu diễn một lớp giao diện
  • <<Abstract>> biểu diễn một lớp trừu tượng
  • <<Service>> biểu diễn một lớp dịch vụ
  • <<Enumeration>> biểu diễn kiểu liệt kê

Chú thích được định nghĩa trong dấu << ở đầu và >> ở cuối. Có ba cách để thêm chú thích cho lớp, kết quả đầu ra của cả ba cách đều giống nhau:

  • Nội tuyến cùng định nghĩa lớp
                            
Sao chép
Nhúng
classDiagram class Shape <<interface>>

Trong một dòng riêng sau khi định nghĩa lớp:

Mã
                            
Sao chép
Nhúng
classDiagram class Shape <<interface>> Shape Shape : noOfVertices Shape : draw()
  • Trong cấu trúc lồng nhau của định nghĩa lớp:
Mã
                            
Sao chép
Nhúng
classDiagram class Shape{ <<interface>> noOfVertices draw() } class Color{ <<enumeration>> RED BLUE GREEN WHITE BLACK }

Chú thích

Có thể nhập chú thích trong biểu đồ lớp, trình soạn thảo sẽ bỏ qua chú thích này. Chú thích cần chiếm một dòng riêng và phải bắt đầu bằng hai dấu phần trăm (%%). Toàn bộ văn bản cho đến dòng tiếp theo đều được coi là chú thích, bao gồm cả bất kỳ cú pháp biểu đồ lớp nào.

Mã
                            
Sao chép
Nhúng
classDiagram %% This whole line is a comment classDiagram class Shape <<interface>> class Shape{ <<interface>> noOfVertices draw() }

Đặt hướng của biểu đồ

Bạn có thể dùng câu lệnh hướng để đặt hướng kết xuất của biểu đồ lớp:

Mã
                            
Sao chép
Nhúng
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

Tương tác

Có thể gắn sự kiện nhấp cho nút. Sự kiện nhấp có thể kích hoạt hàm gọi lại JavaScript, hoặc mở một liên kết sẽ được tải trong tab trình duyệt mới. Lưu ý: tính năng này bị vô hiệu hóa khi dùng securityLevel='strict', và được bật khi dùng securityLevel='loose'.

Bạn có thể định nghĩa các thao tác này trên một dòng riêng sau tất cả khai báo lớp.

                            
Sao chép
Nhúng
action className "reference" "tooltip" click className call callback() "tooltip" click className href "url" "tooltip"
  • action là link hoặc callback, tùy thuộc vào loại tương tác mà bạn muốn gọi.
  • className là id của nút gắn với thao tác.
  • reference có thể là liên kết URL, cũng có thể là tên của hàm gọi lại.
  • (Tùy chọn) chú thích công cụ là chuỗi hiển thị khi chuột di chuột qua phần tử.
  • Hàm gọi lại sẽ được gọi với nodeId làm tham số.

Lưu ý

Có thể dùng note "line1 line2" để thêm chú thích trên biểu đồ. Có thể dùng note for <CLASS NAME> "line1 line2" để thêm chú thích cho một lớp cụ thể.

Ví dụ

Mã
                            
Sao chép
Nhúng
classDiagram note "This is a general note" note for MyClass "This is a note for a class" class MyClass{ }

Liên kết URL:

Mã
                            
Sao chép
Nhúng
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"

Cấu hình

Khung thành viên

Có thể ẩn khung thành viên trống của nút lớp, việc này được thực hiện bằng cách thay đổi giá trị hideEmptyMembersBox trong cấu hình biểu đồ lớp.

Mã
                            
Sao chép
Nhúng
--- config: class: hideEmptyMembersBox: true --- classDiagram class Duck