PlantUML 类图语法指南

什么是类图?

UML 类图是面向对象建模的基础结构蓝图。它通过可视化系统的类、其内部属性(数据字段)、方法(函数)以及它们之间的结构关系,来描绘一个软件系统。尽管代码库可能变得庞大且难以解析,但一个清晰的类图能为工程师提供即时的视觉参考,了解代码对象如何交互、继承行为以及管理数据边界。

使用 VPasCode,您可以完全使用纯文本设计详细的类布局,将布局工程、框体大小和行间距完全交由我们集成的云引擎处理。

核心语法指南:元素与构造

要编写高质量的类图,您需要理解三个核心结构标记:定义类体、为成员分配可见性修饰符以及映射对象关系。

1. 声明类和成员

您使用 class关键字声明一个标准的对象蓝图。在尾随的大括号内,您将字段和方法分别列在不同的行上:

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

2. 可见性修饰符(访问控制)

PlantUML 使用简单的文本前缀,在字段或方法名称之前,映射标准的面向对象封装规则(public、private、protected 和 package-private):

  • + 明确的公共访问(任何其他类均可访问)
  • - 严格的私有访问(仅在此特定类内可访问)
  • # 受保护的访问(在此类及其子类中可访问)
  • ~ 包/内部访问(仅在本地代码模块内可访问)

3. 定义对象关系

连接类需要使用特定的箭头符号来表示应用程序代码的结构依赖或组合关系:

  • 继承/泛化(是-一种): 使用一个开口的三角形箭头,指向父类:子类 --|> 父类
  • 实现/实现: 使用虚线和开口三角形来表示接口的实现:具体类 ..|> 接口
  • 组合(严格拥有): 使用实心菱形表示子对象不能脱离父容器而存在:父类 *-- 子类
  • 聚合(共享集合): 使用开口菱形表示临时的集合关系:部门 o-- 员工

实用类图的最佳实践

  • 使用抽象类区分布局: 使用 抽象类接口 关键字,以在视觉上区分你的结构边界与具体的数据库模型。
  • 尽早标注多重性: 始终在关系箭头的两端添加数值多重性(例如 "1""0..*")以明确向开发者展示数据约束。
  • 控制垂直间距: 类图可能会变得非常高。如果布局在垂直方向上拉伸过长,将双破折号(--)替换为单破折号(-) 放在关系箭头内,以强制并排水平对齐。

现实世界中的 PlantUML 类图示例

示例 1:电子商务领域模型(可见性与封装)

此蓝图展示了标准访问修饰符、基本数据对象,以及核心在线购物实体之间的基本数据多重性映射。

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

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

User "1" --> "0..*" Order : "下单并拥有"
@enduml

语法解析:- 前缀确保像凭据这样的敏感字段在 User 类块内严格私有,而公共访问函数使用 + 标记。连接字符串明确指出,一个用户可以无缝地查找零个或多个订单。

示例 2:高级支付网关(继承与接口)

此全面的软件工程图展示了如何在一个统一框架内组织接口、类继承循环以及复杂组合。

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

' 结构关系声明
BaseGateway ..|> IPaymentProcessor
StripeGateway --|> BaseGateway
PayPalGateway --|> BaseGateway
ShoppingCart *-- IPaymentProcessor
@enduml

语法解析:..|> 符号表明抽象类实现了我们的主要根接口。实心三角形线(--|>)将子网关清晰地指向其基父类,而实心菱形(*--)表示一个 购物车在会话生命周期中,它本质上拥有其支付引擎处理器。

滚动至顶部