Hướng dẫn cú pháp sơ đồ lớp PlantUML

Sơ đồ lớp là gì?

Một UML Sơ đồ lớplà bản thiết kế cấu trúc nền tảng cho mô hình hóa hướng đối tượng. Nó mô tả một hệ thống phần mềm bằng cách trực quan hóa các lớp của nó, các thuộc tính nội bộ (trường dữ liệu), các phương thức (hàm) và các mối quan hệ cấu trúc giữa chúng. Trong khi các cơ sở mã nguồn có thể trở nên rộng lớn và khó phân tích, một sơ đồ lớp sạch sẽ cung cấp cho các kỹ sư một tham chiếu trực quan tức thì về cách các đối tượng mã nguồn tương tác, kế thừa hành vi và quản lý các ranh giới dữ liệu.

Sử dụng VPasCode, bạn có thể thiết kế bố cục lớp chi tiết hoàn toàn bằng văn bản thuần túy, để việc xử lý bố cục, kích thước hộp và khoảng cách dòng hoàn toàn cho các động cơ đám mây tích hợp của chúng tôi.

Hướng dẫn cú pháp cốt lõi: Các thành phần và cấu trúc

Để viết các sơ đồ lớp chất lượng cao, bạn cần hiểu ba dấu hiệu cấu trúc cốt lõi: xác định thân lớp, gán các mô-đun quyền truy cập cho các thành viên và ánh xạ các mối quan hệ đối tượng.

1. Khai báo lớp và các thành viên

Bạn khai báo một bản thiết kế đối tượng tiêu chuẩn bằng cách sử dụng từ khóa classkeyword. Bên trong các dấu ngoặc nhọn kết thúc, bạn liệt kê các trường và phương thức trên từng dòng riêng biệt:

class CustomerAccount {
    String accountId
    String emailAddress
    Boolean isActive()
}

2. Các mô-đun quyền truy cập (kiểm soát truy cập)

PlantUML ánh xạ các quy tắc đóng gói hướng đối tượng tiêu chuẩn (public, private, protected và package-private) bằng cách sử dụng các tiền tố văn bản đơn giản ngay trước tên trường hoặc phương thức:

  • + Truy cập công khai rõ ràng (có thể truy cập bởi bất kỳ lớp nào khác)
  • - Truy cập riêng tư nghiêm ngặt (chỉ có thể truy cập bên trong lớp cụ thể này)
  • # Truy cập bảo vệ (có thể truy cập bên trong lớp này và các lớp con của nó)
  • ~ Truy cập gói/Nội bộ (chỉ có thể truy cập bên trong mô-đun mã nguồn cục bộ)

3. Xác định các mối quan hệ đối tượng

Kết nối các lớp yêu cầu các ký hiệu mũi tên cụ thể để chỉ ra sự phụ thuộc cấu trúc hoặc sự kết hợp của mã nguồn ứng dụng của bạn:

  • Kế thừa / Tổng quát hóa (Là-một):Sử dụng đầu mũi tên tam giác hở hướng về lớp cha: SubClass --|> ParentClass
  • Thực thi / Thực hiện:Sử dụng đường nét đứt kèm tam giác hở để thể hiện thực thi giao diện: ConcreteClass ..|> IInterface
  • Thành phần (Quyền sở hữu nghiêm ngặt):Sử dụng hình kim cương đầy để thể hiện đối tượng con không thể tồn tại nếu không có container cha: Parent *-- Child
  • Tổ hợp (Bộ sưu tập chung):Sử dụng hình kim cương hở để thể hiện mối quan hệ bộ sưu tập tạm thời: Department o-- Employee

Các thực hành tốt nhất cho bản đồ lớp thực tế

  • Tách biệt bố cục bằng các lớp trừu tượng: Sử dụng từ khóa abstract class hoặc interface để phân biệt trực quan các ranh giới cấu trúc của bạn với các mô hình cơ sở dữ liệu cụ thể.
  • Gắn nhãn các bội số sớm: Luôn thêm các bội số số học (như "1" hoặc "0..*") ở cả hai đầu mũi tên quan hệ để làm rõ ràng ràng buộc dữ liệu cho các nhà phát triển.
  • Kiểm soát khoảng cách dọc: Các sơ đồ lớp có thể trở nên rất cao. Nếu bố cục của bạn kéo dài quá xa theo chiều dọc, hãy thay thế dấu gạch đôi (--) bằng dấu gạch đơn (-) bên trong các mũi tên quan hệ để buộc căn chỉnh ngang theo chiều song song.

Ví dụ sơ đồ lớp PlantUML trong thế giới thực

Ví dụ 1: Mô hình miền thương mại điện tử (Tính khả kiến & Bao đóng)

Bản thiết kế này minh họa các bộ sửa đổi truy cập chuẩn, các đối tượng dữ liệu cơ bản, và các ánh xạ bội số dữ liệu cơ bản giữa các thực thể mua sắm trực tuyến cốt lõi.

@startuml
class User {
    - String userId
    - String hashedSecret
    + Boolean verifyLogin(String input)
}

class Order {
    + String orderId
    + Date timestamp
    - Double calculateTotal()
}

User "1" --> "0..*" Order : "đặt và sở hữu"
@enduml

Phân tích cú pháp: Ký hiệu - tiền tố giữ các trường nhạy cảm như thông tin đăng nhập hoàn toàn riêng tư bên trong khối lớp User lớp, trong khi các hàm truy cập công khai sử dụng ký hiệu + marker. Chuỗi kết nối rõ ràng nhấn mạnh rằng một người dùng có thể tra cứu không có hoặc nhiều đơn hàng một cách liền mạch.

Ví dụ 2: Cổng thanh toán nâng cao (Kế thừa & Giao diện)

Bản đồ kỹ thuật phần mềm toàn diện này minh họa cách tổ chức các giao diện, vòng kế thừa lớp và các cấu thành phức tạp trong một khung hình thống nhất.

@startuml
interface IPaymentProcessor {
    + Boolean authorizeAmount(Double cash)
    + void captureFunds()
}

abstract class BaseGateway {
    # String merchantApiKey
    # String endpointUrl
    + void logTransaction(String payload)
}

class StripeGateway {
    - String stripeToken
    + Boolean authorizeAmount(Double cash)
    + void captureFunds()
}

class PayPalGateway {
    - String paypalEmail
    + Boolean authorizeAmount(Double cash)
    + void captureFunds()
}

class ShoppingCart {
    - List items
    + void checkout(IPaymentProcessor engine)
}

' Khai báo quan hệ cấu trúc
BaseGateway ..|> IPaymentProcessor
StripeGateway --|> BaseGateway
PayPalGateway --|> BaseGateway
ShoppingCart *-- IPaymentProcessor
@enduml

Phân tích cú pháp: Ký hiệu ..|> ký hiệu xác lập rằng lớp trừu tượng triển khai giao diện gốc chính của chúng ta. Các đường tam giác đầy (--|>) dẫn các cổng con một cách rõ ràng vào lớp cha cơ sở, trong khi hình kim cương đầy (*--) khai báo rằng một Giỏ hàng về cơ bản sở hữu bộ xử lý động cơ thanh toán của nó trong suốt vòng đời của một phiên làm việc.

Lên đầu trang