建模基础与UML
1. 什么是模型?
模型是一种 从特定视角对系统的完整描述 并作为 现实的简化表示。你构建模型是因为复杂的系统无法被完全理解。
建模的四个核心目标:
-
可视化 一个系统原本应有的样子。
-
指定 系统的结构或行为。
-
提供一个模板 以指导系统构建。
-
记录 设计决策。
建模的四个原则
-
你选择的模型会直接影响问题的解决方式。
-
每个模型都可以以不同精度来表达。
-
最有效的模型始终与现实紧密相连。
-
单一模型不足以胜任;复杂系统需要多种视角。
什么是UML?
统一建模语言(UML) 是一种由 对象管理组(OMG)管理的标准化图形语言。它明确地 不是一种方法论或流程,而是一种技术性和图形化的规范,用于:
“可视化、规范、构建并记录软件密集型系统的各种构件。”
UML 为概念元素(业务流程、系统功能)和具体实现(代码语句、数据库模式、可重用组件)提供了一种通用的蓝图格式。

UML 的四大支柱
| 目的 | 描述 |
|---|---|
| 可视化 | 确保所有利益相关者使用相同的语言。明确的模型可以消除沟通错误,并揭示在没有建模的情况下无法看到的系统方面。 |
| 规范 | 创建精确、无歧义且完整的系统定义。 |
| 构建 | 可直接映射到编程语言(Java、C++、VB)、关系数据库管理系统表或对象数据库管理系统存储。支持正向工程(模型 → 代码)以及逆向工程(代码 → 模型)。 |
| 文档化 | 记录系统架构、需求、测试计划、项目进度安排和发布管理。 |
2. UML 图表生态系统
UML 2.2 定义了14 种图表类型,分为两大类:
-
结构模型(静态架构)
-
行为与交互模型(动态过程)
不同的图表服务于不同的利益相关者视角:
-
用例视图:用户端功能
-
逻辑视图:分析人员与设计师(系统结构)
-
过程视图: 软件管理(性能、可扩展性、吞吐量)
-
实现视图: 程序员(具体组件)
-
部署视图: 系统集成商(拓扑结构、安装、通信)
3. 核心UML图解
🔹 用例图
-
目的: 描述系统的预期功能及其环境。作为客户与开发人员之间的契约。
-
组件: 参与者、用例及其关系。
-
支持性图示: 活动图(用例内的流程)、顺序图(对象协作以实现用例)。
🔹 活动图
-
目的: 可视化流程或用例内事件的逐步流程。
-
关键元素:
-
动作:工作流中的一个独立步骤。 -
流程:活动的顺序。 -
决策:根据守卫条件分割流程[条件]. -
分叉:开始并发线程。 -
合并:结束并发线程(同步)。
-
-
示例:课程注册流程,包含检查、冲突解决和并发时间表更新。
🔹 时序图
-
目的:展示对象如何在时间内交互以实现用例。
-
关键元素:
-
生命线:垂直线,表示对象在时间上的存在。 -
对象/类:交互中的参与者。 -
消息:对象之间交换的数据或方法调用。 -
执行出现:细长矩形,表示对象正在积极处理的时刻。 -
组合片段:opt(可选执行)(可选执行),loop(重复执行)(重复执行),ref(引用另一个交互)(引用另一个交互)。
-
🔹 通信图
-
目的:时序图的替代方案。强调对象之间的结构关系,而非时间顺序。
-
关键元素:对象通过链接连接在一起,编号的消息表示沿链接的交互顺序。
🔹 组件图
-
目的:显示软件组件级别的运行时结构。
-
关键元素:隐藏在外部接口之后的模块化系统部分。通常包括类以显示实现关系。
🔹 部署图
-
目的:将软件构件映射到物理硬件。
-
关键元素:
-
节点:表示物理机器或执行环境。 -
构件:表示物理文件或可部署单元。 -
拥有元素:显示嵌套或包含关系。
-
4. 掌握类图与关系
类图描述了 静态结构 的系统。它们是数据规范(例如,INSPIRE)的基础,并且不显示时间信息。不 显示时间信息。
类的结构
| 分隔区 | 描述 |
|---|---|
| 名称 | 类的标识符(例如, CadastralParcel)。通常包括如 «FeatureType». |
| 属性 | 具有数据类型的命名属性(例如:- 地址 : 字符, - 树龄 : 整数)。支持的类型:整数、长整数、双精度、字符、日期、布尔值、字符串、几何类型等。 |
| 操作 | 类的行为/方法。格式:+ 操作名称(输入类型) : 返回类型. |
关系类型
| 关系 | 符号 | 含义 |
|---|---|---|
| 关联 | ─────── |
类之间的通用链接。包括角色名称、导航箭头和基数(1..*, 0..*, 1..2,等)。 |
| 泛化 | ─────▷ |
继承。子类(源)继承父类(目标)的所有特性。 |
| 聚合 | ◇───── |
“部分-整体”关系。部分可以独立存在整体的一部分。(空菱形) |
| 组合 | ◆───── |
强烈的“部分-整体”关系。部分的存在完全依赖于整体。(实心菱形) |
来自培训材料的示例:
-
人员→伐木工(泛化:伐木工继承姓名,性别) -
森林◇─树木(聚合:树木可以独立于特定森林存在) -
伐木工◆─员工(组合:在此上下文中,员工无法独立于伐木工实体存在)
5. 实际应用:INSPIRE地籍建模
培训材料使用了INSPIRE地籍数据规范来展示现实世界中的UML应用。
练习1:建模一个核心类
任务:创建地籍地块类。
解决方案结构:
«要素类型» 地籍地块
- 地址:字符
- APN(地块编号):字符
- 边界:GM_Surface
- 中心点:GM_Point
- 标签:字符
- 国家地籍参考:字符串
- 面积值:双精度(可选)
- 参考点:GM_Point(可选)
注意:存在多种有效的解决方案。属性应反映常见的现实世界特征。
练习2:建模关系
任务:连接地籍地块, 地籍边界,以及行政区域.
关键建模决策:
-
地籍地块────地籍边界: 关联/组合(边界定义地块;通常为1..1或1..*的基数)。角色:+是边界/+拥有边界. -
地籍地块◇──行政区域: 聚合/关联。该区域的存在并不依赖于于地块。地块属于多个层级的区域(1..*至0..*). -
经验教训:根据生命周期依赖关系和业务规则选择关系类型。图表应反映现实情况,而非强加人为约束。
6. 有效UML建模的最佳实践
-
战略性地使用图表:图表用于展现特定视角。没有一个复杂系统能仅通过单一图表完全理解。
-
在不同图表中复用元素:一个类可能出现在类图、状态机、顺序图和部署视图中,每种图表突出展示其不同方面。
-
根据受众匹配精确度:根据查看者是最终用户、开发人员、系统集成人员还是项目经理,调整图表的复杂程度。
-
与现实进行验证:持续验证模型元素、关系和基数是否真实反映系统行为和领域规则。
-
利用工具支持:使用符合UML标准的工具(例如Sparx Systems)进行正向/逆向工程、一致性检查和代码生成。
结论
UML是一种强大且标准化的语言,用于交流、设计和记录软件及数据密集型系统。通过掌握核心图表(尤其是类图、顺序图、活动图和用例图)并理解关系语义(关联、泛化、聚合、组合),从业者能够创建精确且与现实一致的蓝图,弥合概念需求与技术实现之间的差距。












