目录
在软件工程中,UML(统一建模语言)图有很多种类型,主要包括:
- 用例图(Use Case Diagram):描述系统的功能和用户(或其他系统)与系统之间的交互。
- 类图(Class Diagram):描述系统中对象的类型以及它们之间存在的各种静态关系。
- 对象图(Object Diagram):表示某一时刻系统中对象的状态。
- 时序图(Sequence Diagram):描述对象之间随时间的交互顺序。
- 协作图(Communication Diagram):类似于时序图,但重点展示对象间的消息流动。
- 状态图(State Diagram):描述对象在其生命周期中不同状态的变化。
- 活动图(Activity Diagram):表示工作流或业务流程中的活动和控制流。
- 组件图(Component Diagram):描述系统的物理组件及其关系。
- 部署图(Deployment Diagram):展示系统硬件节点及其上部署的软件组件。
一、用例图(Use Case Diagram)
功能:
用例图主要描述系统的功能(用例)以及参与者(用户或其他系统)与系统之间的交互。它帮助确定系统的功能需求并描绘系统的外部视角。
应用阶段:
- 需求分析阶段:用来与客户或相关方讨论系统的需求,确定系统应该提供哪些功能,以及用户或其他系统如何与这些功能交互。
- 概要设计阶段:在概要设计中,基于用例图进一步定义系统的功能模块和各个模块的接口。
用例图中包含以下三种关系:
- 包含关系使用符号《include》,想要查看订单列表,前提是需要先登录。
- 扩展关系使用符号《extend》,基于查询订单列表的功能,可以增加一个导出数据的功能
- 泛化关系,子用例继承父用例所有结构、行为和关系。
二、类图(Class Diagram)
功能:
类图描述系统中类的静态结构,展示类的属性、方法以及类之间的关系(如继承、关联、依赖等)。它是面向对象设计的核心部分。
应用阶段:
- 概要设计阶段:在系统功能模块确定之后,类图有助于定义每个模块的类结构,指导后续的详细设计。
- 详细设计阶段:类图进一步精细化,补充类的属性、方法,明确类之间的关系,并指导代码实现。
类之间的关系主要有六种:关联、依赖、继承(泛化)、实现、聚合、组合。
2.1、泛化(Generalization)
- 【泛化关系】是一种继承关系,表示子类继承父类的所有特征和行为。
2.2、实现(Realization)
- 【实现关系】是一种类与接口的关系,表示类是接口所有特征和行为的实现。
2.3、关联(Association)
- 【关联关系】是一种拥有关系,它使得一个类知道另一个类的属性和方法。
- 【代码体现】成员变量
2.4、聚合(Aggregation)
- 【聚合关系】是一种整体与部分的关系。且部分可以离开整体而单独存在。聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
- 【代码体现】成员变量
2.5、组合(Composition)
- 【组合关系】是一种整体与部分的关系。但部分不能离开整体而单独存在,组合关系是关联关系的一种,是比聚合关系还要强的关系。
- 【代码体现】成员变量
2.6、依赖(Dependency)
- 【依赖关系】是一种使用关系,即一个类的实现需要另一个类的协助。
三、时序图(Sequence Diagram)
功能:
时序图用于描述对象之间随时间顺序的交互。它展示了系统中各个组件如何通过消息进行交互,以及消息传递的顺序。
应用阶段:
- 概要设计阶段:在定义了系统的模块和功能之后,时序图帮助展示模块间的交互方式,进一步明确系统设计。
- 详细设计阶段:通过时序图详细描述系统中各个对象和类之间的消息传递,帮助开发者实现交互逻辑。
支付宝条码支付场景的序列图。
四、状态图(State Diagram)
功能:
状态图用于描述对象在其生命周期中可能处于的不同状态以及状态之间的转变。它强调对象状态的变化和触发条件。
应用阶段:
- 需求分析阶段:可以帮助分析对象生命周期中的状态变化,尤其对于复杂的业务逻辑和流程至关重要。
- 概要设计阶段:用来细化业务对象的生命周期和状态管理,为后续设计提供指导。
- 详细设计阶段:进一步细化状态转移的规则和条件。
门在其生命周期内所经历的状态。
五、活动图(Activity Diagram)
功能:
活动图用于描述系统中的工作流或业务流程,它展示了一个过程或操作中的活动和决策节点,以及活动之间的控制流。
应用阶段:
- 需求分析阶段:帮助分析业务流程,定义系统应支持的工作流。
- 概要设计阶段:将业务流程映射到系统设计中,帮助分析系统中活动的执行流程。
- 详细设计阶段:进一步细化工作流,描述活动之间的具体交互和执行顺序。
六、组件图(Component Diagram)
功能:
组件图描述系统的物理组件及其之间的关系,通常用于展示系统的模块化结构和不同组件之间的依赖。
应用阶段:
- 概要设计阶段:在模块划分完成后,组件图有助于展示系统的模块间关系,进一步明确每个模块的职责。
- 详细设计阶段:帮助团队理解系统的组件结构,特别是在大规模分布式系统或微服务架构中,展示各组件如何协同工作。
订单系统组件依赖于客户资源库和库存系统组件。中间的虚线箭头表示依赖关系。另外两个符号,表示组件连接器,一个提供接口,一个需要接口。
七、部署图(Deployment Diagram)
功能:
部署图展示系统的物理架构,展示系统如何部署到硬件节点上以及这些节点之间的关系。它帮助理解系统的硬件和软件之间的映射。
应用阶段:
- 概要设计阶段:定义系统的物理架构,帮助理解部署的物理环境,如服务器、数据库、网络等。
- 详细设计阶段:详细定义每个组件在物理设备上的部署情况,特别是在云架构或分布式系统中。
八、总结
以下是软件系统设计三个阶段主要使用的一些UML图:
- 需求分析阶段:主要使用用例图、状态图、活动图。
- 概要设计阶段:用来展示系统的整体结构,使用类图、组件图、用例图、活动图、时序图等。
- 详细设计阶段:进一步细化设计,使用类图、对象图、时序图、协作图、状态图、部署图等。
分享一个笔者工作中用的比较多的UML工具:
使用简单的文字描述画UML图的开源工具。