使用PlantUML绘制类图
UML类图介绍
UML类图用于描述系统中的 类( 对象) 本身的组成和类( 对象) 之间的各种静态关系。类之间的关系: 依赖、继承、实现、关联、聚合与组合。
使用 UML 表示一个类,主要由三部分组成。类名
、属性
、方法
。其中属性
和方法
的访问修饰符用 -
、#
、+
表示 private
、protected
、public
。
如图所示,表示A
类有一个private
属性,protected
构造函数和public
方法。
@startuml
class A{
- String field
+ A()
# void method()
}
note right: 这是测试类 A
@enduml
复制代码
UML 描述类之间的关系
在面向对象语言中,类的关系有很多种,可以概括为三类:泛化
、依赖
、关联
。
泛化
泛化指父类跟子类的关系, 表示is-a
的关系。如父类是抽象类或普通类,则这种关系叫继承。如,父类是接口,则这种关系叫实现。UML 中,继承和实现由不同的标记表示。
继承
PlantUML 用 --|>
表示继承关系。实线和三角形的抽象表示,指向谁,即继承谁。
@startuml
class A
abstract B
' A 继承 B
A --|> B
@enduml
复制代码
实现
PlantUML 用 ..|>
表示实现关系。虚和三角形的抽象表示,指向谁,即实现谁。
@startuml
class A
interface C
' A 实现 C
A ..|> C
@enduml
复制代码
依赖
类之间,最弱的关联方式。常用于在 A 类的方法中使用 B 类的对象作为参数、局部变量或者对 B 类静态方法的调用。
PlantUML 用 ..>
表示依赖关系。虚线和箭头的抽象表示,指向谁,即依赖谁。
@startuml
class A
class B
' A 依赖 B
A ..> B
@enduml
复制代码
关联
关联关系,即对象之间的引用关系。常使用类的属性表达。
单向关联
B 类作为 A 类的属性,表示 A 类与 B 类有关联。 PlantUML 用 -->
表示单向关联。实线线和箭头的抽象表示,指向谁,即关联谁。
@startuml
class A{
- B b
}
class B
' A 关联 B
A --> B
@enduml
复制代码
双向关联
B 类作为 A 类的属性同时,A 类也是 B 类的属性,表示双向关联。 PlantUML 用 --
表示双向关联。或者用<-->
。
@startuml
class A{
- B b
}
class B{
- A a
}
' A 关联 B
A -- B
@enduml
复制代码
自关联
A 类关联 A 类自身。常见于单例模式。
@startuml
class A{
- A a
}
' A 关联 A
A --> A
@enduml
复制代码
聚合
在关联关系的基础上,延伸出聚合关系,强的关联关系,表示has-a
关系。整体与部分的关系,部分不依赖于整体,可独立存在。常用于成员变量。
如;汽车和轮胎的关系,轮胎可作为独立的商品出售。
PlantUML 用 o--
表示聚合关系。实线和空心菱形的抽象表示,指向谁,表示谁是整体。
@startuml
class Car{
- List<Wheel> wheels
}
class Wheel
' Car 关联 Wheel
Car "1" o-- "4" Wheel
@enduml
复制代码
图中数字1
和4
也表示一对多关联。N
对N
同理。
组合
在关联关系的基础上,延伸出另外一种关联关系,组合关系,表示contains-a
关系。整体与部分的关系,部分依赖于整体,不可独立存在。常用于成员变量。
如:身体和动作的关系。
PlantUML 用 *--
表示聚合关系。实线和实心菱形的抽象表示,指向谁,表示谁是整体。
@startuml
class Body{
- List<Action> actions
}
class Action
' Body 关联 Action
Body "1" *-- "N" Action
@enduml
复制代码
PlantUML 指定类与类之间的相对关系。
相比较其他的 UML 软件或插件。PlantUML 的优势在于,存储的是文本文件,可以方便的进行团队协作以及高度可定制化的依赖关系。但是,最大的缺点在于,排版是通过插件自动生成的,排版效果不尽人意。因此,PlantUML 提供四个关键字 up
down
left
right
。指定类与类之间的相对关系。
default
@startuml
class A1
class B1
A1 --> B1
class A2
class B2
A2 <-- B2
@enduml
复制代码
箭头向左时,被指向对象在上; 箭头向右时,被指向对象在下。
up
@startuml
class A1
class B1
A1 -up-> B1
class A2
class B2
A2 <-up- B2
@enduml
复制代码
使用 up 时,被指向对象在上。
down
@startuml
class A1
class B1
A1 -down-> B1
class A2
class B2
A2 <-down- B2
@enduml
复制代码
使用 down 时,被指向对象在下。
left
@startuml
class A1
class B1
A1 -left-> B1
class A2
class B2
A2 <-left- B2
@enduml
复制代码
使用 left 时,被指向对象在左。
right
@startuml
class A1
class B1
A1 -right-> B1
class A2
class B2
A2 <-right- B2
@enduml
复制代码
使用 right 时,被指向对象在右。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)