最近在写文档,需要用到比较复杂的 UML 图,翻译一篇 draw.io 官网上的博客复习一下。
前言
统一建模语言(UML)是一种为系统和软件进行说明和可视化的一种图表符号(语言)。它在软件开发中是最流行的图表形式之一,并于 1997 年被采纳成为了 ISO 规范。之后又更新了一些额外的 UML 图类用以支持新的编程技术。
图表通常比文字更快也更便于理解,相比于成百上万行的代码中的注释,它们更适用于对系统进行文档说明,虽然注释也同样重要!图表可以在许多情况下为你和你的公司发挥作用,比如…
- 接纳新同事或者团队成员
- 调试问题
- 为新的开发或者流程做计划
- 优化现有的系统和程序
- 审计流程和申请认证评估
另外,当你想开发新的功能的时候 - 你还能通过 UML 图表提前发现许多可能潜在的阻碍开发或者测试的问题。
UML 图分两种主要类别和 14 种不同的类型,每种类型都适用于不同的情况。
- 结构图 (Structure diagrams):表示系统中各部件之间的静态关系
- 关系图 (Behavior diagrams):表示系统中各部件如何相互影响,系统如何变化,如何随时间变化
UML 图的分类
常用的 UML 图
有一些 UML 图在软件开发和系统建模(包括 IT 基础设施和商业系统)中应用很广泛。前三种你最需要了解的 UML 图是例图,类图(如何你是程序员的话)以及时序图。
类图
面向对象编程语言基于类和它们之间的关系。类图(Class diagrams)则用于可视化的表示这些关系。
类包含属性(类的数据)和行为(成员函数),它们之间的关系用连接线表示。
时序图
时序图(Sequence diagrams)用于可视化程序,逻辑处理和 IT 基础设施中的交互动作。它描述了交互者和实体(例如数据库或其他外部接口)之间按时间或次序发生的交互动作(消息)。
状态图
状态图(State diagrams)在编程中用来描述系统可能处于的各种不同状态。它不局限于编程中 - 因为所有系统和流程都会有状态需要被描述。状态图比起活动图或者时序图来说更简单快捷,但是可表达的信息相对较少。
状态图表示从状态之间的切换,以及什么触发了状态改变。
通信图
通信图(Communication diagrams)又称协作图。和例图类似,详细描述信息如何被传递。不过通常时序图会更常用,因为时序图的可视化更清晰也有拥有更丰富的符号注释。
其他用于更大,更复杂或者特殊系统的 UML 图
下面 8 种UML 图用于特定环境,通常是拥有许多控件的庞大的系统。
时间图
时间图(Timing diagrams)一种特殊类型的时序图,它遵循对象随时间推移的行为。常用在嵌入式系统设计中,例如洗衣机的编程控制软件。
对象关系图
对象关系图(Object diagrams)是类图的一种特殊形式。它们将更抽象的类图可视化,就好像它们已经实例化一样,并帮助软件开发人员检查它们的抽象结构在实践中是否有效。
组件图
组件图(Component diagrams)用于描述多个组件在复杂的系统中关系以及它们之间如何通过接口通信。简单或者直观的系统通常不需要用到组件图。
部署图
部署图(Deployment diagrams)是另一种为大型复杂系统设计的特殊图表,其中软件部署在多个系统只上。如今,像 Amazon Web Services(AWS) 和 Google Cloud Platform(GCP) 这样的网络服务都有自己的符号 - 可以在它们的 draw.io 符号库中找到这些符号。
包图
包图(Package diagrams)用于描述系统的依赖关系,并且主要在具有大型代码库时使用。包图可以包含例图用来描述系统的功能,并且能够可视化软件系统中的层级结构。
综合架构图
当你的复杂软件系统拥有许多的用户用例时,综合架构图(Composite structure diagrams)能够可视化程序运行时的情况。它描述了类的内部结构以及和其他类部件的关系。
配置文件图
使用配置文件图(Profile diagrams),您可以扩展和自定义 UML,以便在具有构造型、标记值和约束的特定域(例如,航空航天、医疗保健、金融)或平台(J2EE、.NET)中使用。同样,这种类型的图表通常用于对极其庞大和复杂的系统进行建模。