PlantUML简介

PlantUML 是一个开源的工具,允许我们这样的懒狗使用简单直观的文本语言来创建 UML 图。虽然它支持多种类型的图表(如时序图、用例图、活动图等),但今天我们主要关注最常用的类图(Class Diagram)语法。

为什么选择PlantUML画类图?

  1. 文本化描述 - 不用拖拽,直接用代码描述类的关系
  2. 版本控制友好 - 可以直接纳入Git管理
  3. 快速修改 - 不用担心调整布局,PlantUML会自动处理
  4. 标准化输出 - 团队内部风格统一

类图基本语法

1. 定义一个类

text
@startuml
class User {
    -String name
    -int age
    +void login()
    +void logout()
}
@enduml
PlantUML 渲染出的 User 类图,含 name、age 属性和 login、logout 方法

语法说明:

  • 使用 class 关键字定义类
  • 属性前使用 - 表示private,+ 表示public,# 表示protected
  • 方法的完整语法是:可见性 返回类型 方法名(参数列表)

2. 类之间的关系

text
@startuml
class Animal {
    +void eat()
}
class Dog {
    +void bark()
}
class Cat {
    +void meow()
}

Animal <|-- Dog
Animal <|-- Cat
@enduml
类图:Dog 和 Cat 两个类通过继承箭头指向父类 Animal

常用关系符号:

  • 继承关系:<|--
  • 实现接口:<|..
  • 组合关系:*--
  • 聚合关系:o--
  • 关联关系:-->
  • 依赖关系:..>

3. 接口和抽象类

text
@startuml
interface Playable {
    +void play()
    +void stop()
}
abstract class Instrument {
    -String name
    +{abstract} void makeSound()
}
class Piano {
    +void makeSound()
}

Playable <|.. Piano
Instrument <|-- Piano
@enduml
类图:Piano 类实现 Playable 接口(虚线)并继承抽象类 Instrument(实线)

语法说明:

  • 使用 interface 定义接口
  • 使用 abstract class 定义抽象类
  • 抽象方法可以用 {abstract} 标记

4. 关系的多重性

text
@startuml
class University {
    +String name
}
class Student {
    +String id
    +String name
}
class Course {
    +String code
    +String title
}

University "1" *-- "many" Student
Student "many" -- "many" Course
@enduml
类图:University 与 Student 为 1 对多的组合,Student 与 Course 为多对多

多重性表示:

  • “1” 表示一个
  • “*” 或 “many” 表示多个
  • “0..1” 表示零个或一个
  • “1..*” 表示一个或多个

5. 高级特性

text
@startuml
package "用户管理" {
    class User {
        -String username
        -String password
        +void login()
    }
    class UserProfile {
        -String email
        -String phone
    }
}

package "权限管理" {
    class Role {
        -String name
        +void grant()
    }
    class Permission {
        -String code
        -String description
    }
}

User "1" -- "1" UserProfile
User "*" -- "*" Role
Role "*" -- "*" Permission
@enduml
类图:「用户管理」「权限管理」两个包,包内 User、Role 等类用多重性连线关联

高级特性说明:

  • 使用 package 对类进行分组
  • 可以使用 namespace 定义命名空间
  • 可以使用 note left of、note right of、note top of 添加注释

实用技巧

  1. 布局控制
text
@startuml
left to right direction
class A
class B
class C
A -- B
B -- C
@enduml
  1. 样式定制
text
@startuml
skinparam classAttributeIconSize 0
skinparam class {
    BackgroundColor White
    ArrowColor Black
    BorderColor Black
}
class Example
@enduml

结语

以上就是PlantUML类图的主要语法,掌握这些基础语法就能画出清晰的类图了。记住一点:类图的重点是表达类之间的关系,不要过分关注图的样式,PlantUML会帮我们处理好布局问题。

[图片说明:以上代码块中标注需要放置图片的位置,您可以使用PlantUML生成对应的图片后放置在那些位置]