3.4 UML图表

使用Visio创建统一建模语言图表

UML图表概述

统一建模语言(UML)是软件工程中用于描述、设计和文档化软件系统的标准化建模语言。Visio提供了完整的UML图表绘制功能,支持多种UML图表类型的创建和编辑。

UML的重要性

  • 提供标准化的软件系统描述方法
  • 改善团队间的沟通和协作
  • 支持面向对象的分析和设计
  • 便于系统维护和扩展

Visio中的UML图表类型

类图 (Class Diagram)

描述系统中类的静态结构,包括类的属性、方法以及类之间的关系。是UML中最重要的图表类型。

时序图 (Sequence Diagram)

显示对象之间按时间顺序进行的交互,重点展现消息传递的时间序列。

用例图 (Use Case Diagram)

从用户角度描述系统功能,展现系统与外部参与者的交互关系。

活动图 (Activity Diagram)

描述业务流程或算法的控制流,类似于流程图但更侧重于并发活动。

状态图 (State Diagram)

描述对象在其生命周期中的状态变化和状态间的转换条件。

组件图 (Component Diagram)

展现系统的物理结构,描述软件组件之间的依赖关系。

创建UML图表的步骤

  1. 选择UML模板

    在Visio中选择"软件和数据库" → "UML模型图",或选择特定的UML图表类型模板。

  2. 添加UML形状

    从左侧的模具面板中拖拽相应的UML元素到画布上,如类、对象、用例等。

  3. 配置属性

    双击UML元素,在弹出的对话框中配置元素的属性、方法、可见性等信息。

  4. 建立连接关系

    使用连接线工具创建元素间的关系,如继承、关联、依赖等。

  5. 完善图表

    添加必要的注释、约束条件,调整布局和格式,确保图表清晰易懂。

类图绘制详解

类图基本元素

元素 符号 描述 在Visio中的表示
矩形框 包含类名、属性和方法 Class形状
继承 空心三角箭头 表示"is-a"关系 Generalization连接线
实现 虚线 + 空心三角 类实现接口 Realization连接线
关联 实线 类之间的结构化关系 Association连接线
组合 实心菱形 + 实线 强"has-a"关系 Composition连接线
聚合 空心菱形 + 实线 弱"has-a"关系 Aggregation连接线
依赖 虚线箭头 使用关系 Dependency连接线

类图示例

Vehicle
- brand: String
- model: String
- year: int
+ start(): void
+ stop(): void
Car
- doors: int
- fuelType: String
+ openTrunk(): void
+ lockDoors(): void

Car继承自Vehicle类

类图绘制技巧

注意事项

  • 类名应使用大写字母开头的驼峰命名法
  • 属性和方法的可见性要明确标示(+公有、-私有、#保护)
  • 抽象类名应使用斜体表示
  • 接口名前加 <<interface>> 标识

最佳实践

  • 保持图表简洁,避免包含过多细节
  • 合理安排类的布局,使关系清晰可见
  • 使用包(Package)组织相关的类
  • 添加必要的约束和注释说明

时序图绘制

时序图组成要素

时序图主要包括对象(参与者)、生命线、激活框和消息等元素。

用户
登录请求
系统
验证
数据库

对象/参与者

参与交互的实体,位于图表顶部,生命线垂直向下延伸。

消息

对象间的通信,包括同步消息、异步消息、返回消息等类型。

激活框

表示对象处于活跃状态的时间段,显示在生命线上。

约束

添加时间约束、条件约束等,使图表信息更完整。

实践练习

练习1:图书管理系统类图

创建一个图书管理系统的类图,包括以下类:

  • Book(书籍)- 属性:ISBN、标题、作者、出版社
  • Library(图书馆)- 管理多本书籍
  • Reader(读者)- 属性:ID、姓名、联系方式
  • BorrowRecord(借阅记录)- 关联书籍和读者

要求:正确表示类之间的关系,包括关联、组合等。

练习2:网上购物时序图

绘制网上购物的时序图,参与对象包括:

  • 客户(Customer)
  • 购物网站(Website)
  • 支付系统(Payment System)
  • 库存系统(Inventory System)

流程:浏览商品 → 加入购物车 → 结账 → 支付 → 确认订单

练习3:ATM系统用例图

创建ATM系统的用例图,包括以下用例:

  • 查询余额
  • 取款
  • 存款
  • 转账
  • 修改密码

参与者:银行客户、银行系统、ATM维护人员

高级UML技巧

包图和分层设计

使用包(Package)来组织和管理复杂的UML模型,创建分层的系统架构。

分层架构示例

  • 表现层(Presentation Layer) - 用户界面相关类
  • 业务层(Business Layer) - 业务逻辑处理类
  • 数据访问层(Data Access Layer) - 数据操作相关类
  • 实体层(Entity Layer) - 数据实体类

代码生成和逆向工程

Visio支持从UML模型生成代码骨架,也可以从现有代码逆向生成UML图表。

正向工程

从UML类图生成Java、C#、C++等语言的代码框架,提高开发效率。

逆向工程

分析现有代码结构,自动生成对应的UML类图,便于理解系统架构。

模型同步

保持模型和代码的同步更新,确保文档和实现的一致性。

标记值

使用标记值(Tagged Values)为UML元素添加额外的元数据信息。