统一建模语言(UML)九大图详解
统一建模语言(UML)是一种标准化的建模语言,广泛应用于软件工程领域,用于对软件密集型系统进行可视化、详述、构造和文档化。它如同建筑师的蓝图,为软件开发团队提供了一套通用的、易于理解的可视化工具,以便沟通系统设计、分析系统结构和管理系统复杂度。
UML 2.x版本主要定义了13种图形,但通常被归类和学习的是其中的九大核心图形。这九大图根据其关注的系统不同方面,可以分为两大类:结构图和行为图。
结构图:用于描述系统在某个特定时间点上的静态结构,展示系统的构成元素及其相互关系,而不考虑时间因素。它们回答的是“系统由什么组成?”的问题。
行为图:用于描述系统在随时间变化过程中的动态行为,展示系统对象如何协作以实现功能。它们回答的是“系统如何工作?”的问题。
下面,我们将对这九大图进行逐一深入解析。
一、 结构图
结构图是系统的骨架,它们定义了系统的静态构成,是系统分析和设计的基石。
- 类图
类图是UML中最基础、最核心的图形,它展示了系统的静态结构,特别是系统中存在的类、类的内部结构以及类之间的关系。
核心元素:
类:用矩形表示,分为三层:类名、属性(描述类的状态)和操作/方法(描述类的行为)。
关系:
关联:表示类之间的逻辑连接,如“学生”和“课程”之间存在“选修”关联。可以用多重性(如1, 0..*, 1..n)表示数量关系。
泛化:即继承关系,表示“is-a”关系,如“汽车”是“车辆”的泛化。
实现:表示类与接口之间的关系,类实现了接口定义的契约。
依赖:一种较弱的使用关系,一个类的变化会影响另一个类,如临时性的方法参数、局部变量等。
聚合:一种特殊的关联,表示“has-a”关系,整体和部分可以独立存在,是弱拥有关系。
组合:一种更强的聚合,表示“contains-a”关系,部分与整体共存亡,是强拥有关系。
主要用途:在面向对象分析和设计中,用于定义系统的业务对象模型和设计模型。它是编写代码的直接依据。
- 对象图
对象图是类图在系统某一时刻的快照,它展示了在该时刻系统中存在的对象实例及其之间的具体链接。
核心元素:
对象:用矩形表示,对象名下加下划线,格式为“对象名: 类名”。
链接:是关联关系的实例,表示对象之间的具体连接。
主要用途:用于解释复杂的类图,通过展示具体的对象和链接来验证类图的正确性,或者在运行时调试系统状态。
- 构件图
构件图也称为组件图,它描述了软件构件(即可重用的模块化单元)的组织结构和依赖关系。
核心元素:
构件:用带有两个小矩形的矩形表示,代表一个可替换的物理单元,如一个.jar文件、.dll文件、源代码文件或一个可执行程序。
接口:用圆圈或棒棒糖符号表示,定义了构件对外提供或需要的服务。
依赖关系:表示一个构件需要另一个构件或接口才能正常工作。
主要用途:用于系统的物理架构建模,指导开发人员如何将系统分解为可部署和可替换的组件,并管理它们之间的依赖。
- 部署图
部署图描述了系统硬件节点的物理拓扑结构,以及软件构件在这些节点上的部署情况。
核心元素:
节点:用立方体表示,代表一个物理计算资源,如服务器、计算机、路由器或移动设备。
构件:可以显示在节点内部,表示该构件部署在该节点上运行。
连接:表示节点之间的物理连接,如网络连接(以太网、TCP/IP)或通信协议。
主要用途:用于建模系统的分布式架构,帮助系统工程师和运维人员理解系统的物理部署环境、资源分配和网络拓扑。
- 制品图
制品图是UML 2.0引入的,它代表了软件开发生命周期中产生的物理实体文件。
核心元素:
制品:用带有文档图标的矩形表示,如源代码文件、脚本、二进制可执行文件、数据库表、配置文件、文档等。
依赖关系:表示制品之间的依赖,如一个可执行文件依赖于某个动态链接库。
主要用途:制品图与构件图密切相关,但更侧重于开发过程中的具体文件及其关系,常用于配置管理和版本控制。
- 包图
包图是一种用于对UML元素进行分组的机制,它本身并不是一个严格的结构图,但常被归入此类。
核心元素:
包:用一个大矩形加上一个小标签(类似文件夹)表示。
元素:类、用例、构件等都可以被放入包中。
依赖关系:表示包之间的依赖,如果一个包中的元素依赖于另一个包中的元素,则两个包之间存在依赖。
主要用途:用于管理大型模型的复杂度,通过将语义相近的元素组织到同一个包中,使模型结构更清晰,便于理解和维护。它体现了系统的高层架构划分。
二、 行为图
行为图是系统的血肉,它们描述了系统在运行时的动态交互和状态变化。
- 用例图
用例图从用户角度描述系统的功能需求,它展示了系统与外部参与者(用户或其他系统)的交互。
核心元素:
参与者:用小人图标表示,代表与系统交互的外部实体。
用例:用椭圆表示,代表系统提供的一个完整的功能单元。
系统边界:用一个矩形框表示,将所有用例框在里面,外部是参与者。
关系:
关联:连接参与者和用例。
包含:表示一个用例必须使用另一个用例的功能。
扩展:表示一个用例在特定条件下可以扩展另一个用例的功能。
泛化:参与者之间或用例之间的继承关系。
主要用途:在需求分析阶段,用于捕获和定义系统功能,是开发者与客户、领域专家沟通的桥梁。
- 活动图
活动图类似于流程图,它描述了系统从一个活动到另一个活动的控制流,强调活动的顺序和并发流程。
核心元素:
开始节点、结束节点:表示流程的开始和结束。
活动:表示一个执行步骤。
控制流:连接活动,表示执行顺序。
决策节点:用菱形表示,根据条件判断决定流程分支。
合并节点:将多个分支合并为一个。
分岔与汇合:用粗水平线表示,用于描述并发流程的开始和同步。
泳道:将活动按职责分组到不同的垂直或水平区域,清晰地表示每个活动的执行者。
主要用途:用于对业务工作流、复杂算法的执行流程或用例的具体实现步骤进行建模。特别适合描述并行行为。
- 状态机图
状态机图描述了一个对象在其生命周期内所经历的状态序列,以及导致状态转换的事件。
核心元素:
状态:表示对象在生命周期中的某个条件或情况,如“订单”有“待支付”、“已支付”、“已发货”等状态。
初始状态和终止状态。
转换:从一个状态到另一个状态的有向箭头,由触发事件[监护条件]/动作 来标注。
主要用途:对于具有清晰、复杂状态变化的类(如用户界面控件、协议实体、订单对象)来说,状态机图是极其有用的建模工具。它清晰地展示了对象如何响应外部事件并改变其状态。
- 交互图(行为图的子集)
交互图是行为图的一个重要子类,专注于对象之间的交互。它包括四种图,通常被并列讨论:
顺序图:这是最常用的交互图。它按时间顺序显示了对象之间传递消息的过程。重点在于消息的时间顺序。它清晰地展示了交互的时序,包括对象的创建、销毁和激活期(控制焦点)。
通信图:在UML 1.x中称为协作图。它强调参与交互的对象之间的组织结构(链接),而时间顺序则通过序号来表示。它更侧重于对象间的拓扑连接关系。
交互概览图:是活动图和顺序图的混合体。它将交互(以顺序图片段的形式)作为节点,用类似活动图的控制流来组织这些交互的总体流程。用于描述复杂的交互场景。
时序图:这是一种特殊的交互图,重点在于对象状态变化的具体时间点。纵轴是时间,横轴是不同的对象或生命线。它精确地描述了状态何时改变,以及改变需要持续多长时间,常用于实时或嵌入式系统设计。
总结与综合应用
UML九大图(或更精确地说,这九种核心视图)共同构成了一个多视角、全方位的系统建模工具集。它们彼此关联,互为补充:
开发初期,使用用例图捕获需求。
分析阶段,使用类图和对象图构建领域模型。
设计阶段,使用类图进行详细设计,使用顺序图和通信图描述对象如何协作完成用例,使用状态机图为关键对象建模,使用活动图描述复杂业务流程。
架构设计阶段,使用构件图和部署图定义系统的物理架构。
在整个过程中,使用包图来组织和管理模型元素。