0%

UML简介

UML 简介:统一建模语言的核心图表与应用

UML(Unified Modeling Language,统一建模语言)是软件工程中用于可视化、描述、构造和文档化软件系统的标准化建模语言。它通过一系列图表从不同角度刻画系统的结构、行为和交互,帮助开发者、测试人员和用户理解系统设计。UML 包含多种图表,可分为结构图(静态建模)和行为图(动态建模)两大类,以下是详细解析:

UML 图表的分类框架

UML 图表按建模维度可分为四大类,覆盖系统的静态结构、动态行为、物理部署等方面:

建模类型 核心图表 描述重点
静态建模 类图、对象图、构件图、部署图 系统的结构组成和物理部署
动态建模 状态图、活动图 系统或对象的行为变化过程
交互建模 顺序图(序列图)、通信图(协作图) 对象间的消息交互和协作关系
用例建模 用例图 用户与系统的功能交互

结构图:刻画系统的静态结构

结构图聚焦于系统的组成元素及其关系,不涉及时间或动态行为,主要包括以下图表:

类图(Class Diagram)

类图是 UML 中最核心的图表,用于描述系统中类、接口及其关系,是系统静态设计视图的核心。对系统词汇、简单协作、逻辑数据库模式建模有帮助。

类图

  • 基本元素

    • 类:用矩形表示,分为三层(类名、属性、操作),例如:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      +----------------+
      | 学生(Student) |
      +----------------+
      | - 学号: String | // 属性(-表示私有)
      | - 姓名: String |
      +----------------+
      | + 选课(课程): void | // 操作(+表示公有)
      | + 考试(): int |
      +----------------+
    • 接口:用 “类名 +《interface》” 表示,仅包含操作(无属性)。

  • 关系类型(类 / 接口间的关联方式):

    类图的关系

    • 关联(Association):表示对象间的结构化关系(如 “学生 - 课程” 的选课关系),用实线连接,可标注多重度(如 1 对多:1..*)。

      关联关系

    • 依赖(Dependency):表示一个元素依赖另一个元素(如 “学生” 依赖 “成绩” 计算),用虚线箭头表示(依赖方→被依赖方)。

      依赖关系

    • 泛化(Generalization):表示类间的继承关系(如 “研究生” 继承 “学生”),用实线空心三角箭头表示(子类→父类)。

      泛化关系

    • 实现(Realization):表示类对接口的实现(如 “学生” 实现 “学习者” 接口),用虚线空心三角箭头表示(类→接口)。

      实现关系

    • 聚合(Aggregation):表示 “整体 - 部分” 关系,部分可独立存在(如 “班级” 包含 “学生”,学生可脱离班级存在),用实线空心菱形表示(整体→部分)。

      聚合关系

    • 组合(Composition):表示强聚合关系,部分不能脱离整体存在(如 “人” 包含 “心脏”,心脏不能独立存在),用实线实心菱形表示(整体→部分)。

      组合关系

  • 应用场景

    • 对系统的核心概念(如领域模型)建模。
    • 设计类的层次结构和协作关系(如面向对象编程中的类设计)。
    • 描述数据库的逻辑模型(如实体 - 关系映射)。

对象图(Object Diagram)

对象图是类图的实例快照,描述某一时刻系统中对象及其关系,是类图的具体实例化。

对象图

  • 特点
    • 对象名格式为 “对象名:类名”(如 “张三:学生”),矩形下方有下划线。
    • 显示对象的具体属性值(如 “学号: 2023001”)。
    • 关系与类图一致,但反映的是实例间的关联(如 “张三” 选修 “数学”)。
  • 应用场景
    • 展示系统在特定时刻的状态(如某一订单的实例数据)。
    • 验证类图的合理性(如多重度是否正确)。

构件图(Component Diagram)

构件图描述系统中软件构件及其依赖关系,聚焦于系统的物理实现结构(如模块、库、文件)。用于表示系统的静态实现视图

构件图

  • 基本元素
    • 构件:用带有接口的矩形表示(左侧为提供的接口,右侧为需要的接口),如 “支付模块”“日志组件”。
    • 依赖:用虚线箭头表示构件间的依赖(如 “订单模块” 依赖 “支付模块”)。
  • 应用场景
    • 设计系统的模块划分(如前后端分离架构中的前端构件、后端构件)。
    • 分析构件变更对系统的影响(如修改 “支付模块” 是否影响 “订单模块”)。

部署图(Deployment Diagram)

部署图描述系统的物理部署架构,展示硬件节点(如服务器、设备)与软件构件的映射关系,是唯一直接关联硬件的 UML 图表

部署图

  • 基本元素
    • 节点:用立方体表示,分为硬件节点(如 “应用服务器”“数据库服务器”)和软件节点(如 “操作系统”)。
    • 构件部署:用虚线表示构件部署到节点(如 “订单系统.war” 部署到 “Tomcat 服务器”)。
  • 应用场景
    • 设计系统的物理拓扑(如分布式系统的服务器布局)。
    • 规划硬件资源分配(如数据库部署到高性能服务器)。

行为图:刻画系统的动态行为

行为图聚焦于系统或对象的动态行为和状态变化,涉及时间维度,主要包括以下图表:

用例图(Use Case Diagram)

用例图描述用户与系统的交互功能,列出系统中的用例和参与者,展示系统的功能边界和参与者(用户 / 外部系统)的操作。

用例图

  • 基本元素

    • 参与者(Actor):用小人图标表示,代表与系统交互的用户或外部系统(如 “学生”“教务系统”)。

    • 用例(Use Case):用椭圆表示,代表系统提供的功能(如 “选课”“成绩查询”)。

    • 系统边界:用矩形框表示,框内为系统包含的用例。

    • 关系:用例间的关系包括泛化(如 “查询成绩” 泛化为 “查询期末成绩”)、包含(如 “选课” 包含 “验证学分”)、扩展(如 “选课” 扩展 “补选”)。

      用例图的关系种类

  • 建模流程

    1. 识别参与者(谁使用系统?)。
    2. 提取用例(系统提供什么功能?)。
    3. 定义用例关系(功能间的依赖或扩展)。
  • 应用场景

    • 需求分析阶段梳理系统功能边界(如明确 “在线商城” 需包含 “下单”“支付” 等用例)。
    • 与用户沟通确认功能需求。

顺序图(Sequence Diagram)

顺序图(又称序列图)描述对象间消息交互的时间顺序,是交互建模的核心图表。

顺序图

  • 基本元素
    • 生命线:垂直虚线,表示对象的存在时间(左侧标注对象名:类名)。
    • 消息:用箭头表示对象间的通信,包括:
      • 同步消息(实线箭头):调用方等待响应(如 “学生→课程管理系统:提交选课请求”)。
      • 返回消息(虚线箭头):被调用方返回结果(如 “课程管理系统→学生:选课成功”)。
    • 激活期:生命线上的矩形,表示对象正在处理消息的时间段。
  • 特点
    • 严格按时间顺序排列(从上到下为时间流逝)。
    • 清晰展示 “谁在何时发送 / 接收什么消息”(如电商系统中 “用户 - 订单系统 - 支付系统” 的交互流程)。
  • 应用场景
    • 描述用例的具体执行流程(如 “下单” 用例中用户、订单、支付系统的消息交互)。
    • 分析复杂业务的步骤和依赖(如银行转账的流程验证)。

通信图(协作图,Collaboration Diagram)

通信图与顺序图类似,均描述对象间的交互,但更强调对象间的组织结构而非时间顺序,类元角色上的箭头代表消息,消息的发生顺序使用编号

协作图

  • 基本元素
    • 对象:用矩形表示(标注对象名:类名)。
    • 链:实线表示对象间的关联关系(对应类图中的关联)。
    • 消息:链上的箭头,标注消息名称和编号(如 1: 提交请求,2: 返回结果),编号表示执行顺序。
  • 与顺序图的区别
    • 顺序图:通过位置体现时间,结构清晰但忽略对象间的静态关系。
    • 通信图:通过编号体现时间,突出对象的组织结构,但复杂场景可能显得混乱。
  • 应用场景
    • 分析对象间的协作关系(如团队协作中的角色分工)。
    • 补充顺序图,展示对象的静态关联(如 “订单” 与 “用户”“商品” 的关联)。

状态图(State Machine Diagram)

状态图描述单个对象在生命周期中的状态变化,聚焦于事件如何触发状态转换,展现了一个状态机由状态、转换、事件和活动组成

状态图

  • 基本元素

    • 状态:用圆角矩形表示,包含状态名和活动(如 “待付款” 状态下的 “超时取消” 活动)。
    • 初始状态:实心圆,表示对象的起点。
    • 终止状态:同心圆,表示对象的终点。
    • 转换:带箭头的线,表示状态间的切换,标注 “事件 [条件]/ 动作”(如 “支付成功 [金额 > 0]/ 生成订单”)。
  • 核心概念

    • 事件:触发状态转换的外部刺激(如 “支付”“超时”)。

      状态图事件

    • 监护条件:转换发生的前提(如 “库存> 0” 时才能下单)。

    • 动作:转换时执行的操作(如 “扣减库存”)。

  • 应用场景

    • 描述有明确状态变化的对象(如 “订单” 的状态:待付款→已付款→已发货→已完成)。
    • 分析对象的行为边界(如 “电梯” 的运行状态:开门→关门→上升→下降)。

活动图(Activity Diagram)

活动图是状态图的变体,专注于流程的控制流和数据流,更适合描述业务流程或算法步骤。

活动图

  • 基本元素
    • 活动节点:圆角矩形,表示一个操作或步骤(如 “验证用户”“计算总价”)。
    • 控制流:带箭头的线,表示活动的执行顺序。
    • 分支 / 合并:菱形表示条件判断(如 “库存是否充足?”)。
    • 并行分支:用粗线表示多个活动同时执行(如 “生成订单” 和 “通知仓库” 并行)。
  • 与状态图的区别
    • 状态图:聚焦单个对象的状态变化(如 “订单” 的状态)。
    • 活动图:聚焦多个对象协作的流程(如 “下单流程” 涉及用户、订单系统、库存系统)。
  • 应用场景
    • 业务流程建模(如 “请假审批流程”:提交申请→部门审批→HR 备案)。
    • 算法或程序逻辑可视化(如 “排序算法” 的步骤分解)。

欢迎关注我的其它发布渠道