面向对象建模本质是用标准语言清晰表达“谁在什么时候做了什么”:类图定义静态结构(类、属性、方法及关系),时序图刻画动态流程(对象间消息传递顺序),二者协同明确变量来源、对象传递与方法调用。

面向对象建模不是画图比赛,而是用标准语言把“谁在什么时候做了什么”说清楚。类图定结构,时序图理流程,两者配合,变量怎么来、对象怎么传、方法怎么调,一目了然。
类图:先画清“有哪些东西”和“它们怎么连”
类图描述系统静态结构,核心是类、属性、方法以及类之间的关系。PlantUML语法贴近代码,写起来很顺手:
- 用class关键字定义类,大括号内写字段(带-表示私有)和方法(带+表示公有)
- 关系用箭头表达:继承用,关联用-->,聚合用o-->,组合用*-->
- 字段类型和方法签名尽量写实,比如-email: String、+login(username: String, pwd: String): Boolean,这样生成的图才对开发有指导意义
时序图:聚焦“消息怎么一步步传”
时序图刻画动态行为,重点是对象间按时间顺序发送的消息。关键不是画得多漂亮,而是消息是否真实反映调用链:
- 先用participant或简写actor声明参与者,如participant "User" as u,命名建议带角色或实例名,避免歧义
- 消息用箭头:->是同步调用(等待返回),->>是异步,或表示返回
- 每个消息触发一个激活条(小矩形),它自动出现在接收方生命线上;自调用用self消息,比如u->u: validateInput()
变量交互:在图中体现数据流向
变量本身不单独成图元,但它的传递和变化必须通过图元素显式表达:
- 方法参数就是变量流动的起点,比如userService.login(userDto),说明userDto这个对象实例从调用方传入
- 返回值是变量流动的终点,如:User user = userDao.findById(id),表明user变量由userDao创建并返回
- 如果某个变量在多个步骤中被修改,可在对应消息旁加注释,例如note right of service: user.status updated to 'ACTIVE'
工具选型:文本优先,版本可控
别再用拖拽工具维护UML图了。PlantUML脚本是纯文本,直接放进项目docs/目录,和代码一起git commit:
- VS Code装PlantUML插件,写完按Ctrl+Alt+D实时预览,改几行就刷新图
- 所有图文件统一用.puml后缀,命名规范如user_management_class.puml、login_sequence.puml
- CI流程里可集成plantuml.jar,每次提交自动渲染为PNG或SVG,嵌入Confluence或GitLab Wiki











