0

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()
      }
      

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
      

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ặc namespace để 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


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí