CheatSheet: Biểu đồ Lớp (Class Diagram) với PlantUML
CheatSheet: Biểu đồ Lớp (Class Diagram) với PlantUML
Biểu đồ lớp (Class Diagram) trong PlantUML là công cụ mạnh mẽ để mô tả cấu trúc tĩnh của hệ thống, bao gồm các lớp, thuộc tính, phương thức và mối quan hệ giữa chúng. Tài liệu này cung cấp hướng dẫn chi tiết bằng tiếng Việt, giữ nguyên các từ khóa trong code bằng tiếng Anh, dựa trên tài liệu chính thức từ https://plantuml.com/class-diagram.
1. Cú pháp cơ bản
1.1. Khai báo Class
-
Class đại diện cho một lớp trong hệ thống, bao gồm thuộc tính (attributes) và phương thức (methods).
-
Cú pháp:
class ClassName { Attribute Method() }
-
Ví dụ:
class User { name: String email: String login() }
-
Tùy chỉnh:
- Sử dụng
{}
để định nghĩa nội dung lớp. - Thêm kiểu truy cập:
+
: Public-
: Private#
: Protected~
: Package
- Ví dụ:
class User { +name: String -password: String +login() -validate() }
- Sử dụng
1.2. Khai báo Interface
- Interface định nghĩa các phương thức trừu tượng.
- Cú pháp:
interface InterfaceName { Method() }
- Ví dụ:
interface Auth { login() logout() }
1.3. Khai báo Enum
- Enum định nghĩa tập hợp các giá trị cố định.
- Cú pháp:
enum EnumName { VALUE1 VALUE2 }
- Ví dụ:
enum Role { ADMIN USER GUEST }
2. Mối quan hệ (Relationships)
2.1. Association
-
Mô tả mối liên kết giữa các lớp.
-
Cú pháp:
Class1 --> Class2
-
Ví dụ:
User --> Profile
-
Tùy chỉnh:
- Thêm nhãn:
Class1 --> Class2 : Label
- Thêm số lượng:
Class1 "1" --> "*" Class2
(1-to-many) - Ví dụ:
User "1" --> "*" Order : places
- Thêm nhãn:
2.2. Aggregation
- Mô tả mối quan hệ "has-a" (sở hữu nhưng không chặt chẽ).
- Cú pháp:
Class1 o--> Class2
- Ví dụ:
Department o--> Employee
2.3. Composition
- Mô tả mối quan hệ "has-a" chặt chẽ hơn (nếu lớp cha bị hủy, lớp con cũng bị hủy).
- Cú pháp:
Class1 *--> Class2
- Ví dụ:
Car *--> Engine
2.4. Inheritance
- Mô tả mối quan hệ kế thừa (is-a).
- Cú pháp:
Class1 <|-- Class2
- Ví dụ:
Person <|-- Student
2.5. Implementation
- Mô tả lớp triển khai một interface.
- Cú pháp:
Class1 ..|> Interface
- Ví dụ:
User ..|> Auth
2.6. Dependency
- Mô tả sự phụ thuộc giữa các lớp.
- Cú pháp:
Class1 ..> Class2
- Ví dụ:
User ..> Logger
3. Tùy chỉnh giao diện
3.1. Thay đổi màu sắc
- Sử dụng mã màu hex hoặc tên màu.
- Cú pháp:
class ClassName #Color Class1 --> Class2 #Color
- Ví dụ:
class User #FF0000 User --> Profile #00FF00
3.2. Sử dụng Skinparam
-
Tùy chỉnh giao diện toàn cục.
-
Cú pháp:
skinparam Parameter Value
-
Ví dụ:
skinparam monochrome true class User { +name: String }
-
Các tham số phổ biến:
monochrome
: Biểu đồ đen trắng.backgroundColor
: Màu nền.classBackgroundColor
: Màu nền lớp.classBorderColor
: Màu viền lớp.arrowColor
: Màu mũi tên.
3.3. Ghi chú (Notes)
- Thêm ghi chú để giải thích.
- Cú pháp:
note left of ClassName Note content end note note right of ClassName Note content end note
- Ví dụ:
class User note right of User Represents a system user end note
4. Tính năng nâng cao
4.1. Package
- Nhóm các lớp vào một gói (package).
- Cú pháp:
package PackageName { class Class1 class Class2 }
- Ví dụ:
package "Authentication" { class User class Auth }
4.2. Abstract Class
- Định nghĩa lớp trừu tượng.
- Cú pháp:
abstract class ClassName
- Ví dụ:
abstract class Vehicle { +move() }
4.3. Static Members
- Định nghĩa thuộc tính hoặc phương thức tĩnh.
- Cú pháp:
class ClassName { {static} Attribute {static} Method() }
- Ví dụ:
class Counter { {static} count: int {static} increment() }
4.4. Generic Types
- Mô tả các lớp với kiểu tổng quát.
- Cú pháp:
class ClassName<T>
- Ví dụ:
class List<T> { +add(item: T) }
4.5. Namespace
- Sử dụng namespace để tổ chức lớp.
- Cú pháp:
namespace NamespaceName { class Class1 }
- Ví dụ:
namespace com.example { class User }
5. Ví dụ minh họa
Ví dụ đầy đủ mô tả hệ thống quản lý người dùng:
@startuml
title Hệ thống Quản lý Người dùng
package "Authentication" {
interface Auth {
+login()
+logout()
}
class User {
+name: String
-password: String
+login()
}
User ..|> Auth
}
class Profile {
+bio: String
+update()
}
enum Role {
ADMIN
USER
GUEST
}
User "1" --> "*" Profile : has
User --> Role : assigned
note right of User
Represents a system user with authentication
end note
@enduml
6. Mẹo và lưu ý
- Kiểm tra cú pháp: Sử dụng công cụ trực tuyến PlantUML (http://www.plantuml.com/plantuml) để kiểm tra lỗi.
- Tối ưu hóa: Dùng
skinparam
để cải thiện giao diện. - Tổ chức: Sử dụng
package
hoặcnamespace
để nhóm các lớp liên quan. - Ghi chú: Thêm
note
để làm rõ ý nghĩa của lớp hoặc mối quan hệ. - Hỗ trợ tiếng Việt: PlantUML hỗ trợ UTF-8, cho phép sử dụng tiếng Việt mà không cần cấu hình thêm.
7. Tài liệu tham khảo
- Trang chính thức: https://plantuml.com/class-diagram
- Diễn đàn hỗ trợ: https://forum.plantuml.net/
- Công cụ trực tuyến: http://www.plantuml.com/plantuml
All rights reserved