UML 是统一建模语言(英语:Unified Modeling Language,缩写 UML)的简称,它是一种由一整套图表组成的标准化建模语言,用于帮助系统开发人员来说明,可视化,构建和记录软件系统的产出。用人话说 UML 就是用图形符号帮助我们描述系统和设计系统的语言工具。
UML 最初由 Rumbaugh,Booch 和 Jacobson 三人于 1994-1995 合作开发,后面随着参与 UML 建设的组织越来越多,比如微软,甲骨文,IBM等等,UML 1.0 版本在 1997 年正式推出,随着不断改良完善,现在的 UML 版本更新到了 2.5。
UML 最大的特点的就是定义了丰富的图形符号,可以很好地描述一个系统的内部结构或者一个业务流程,让我们应对现实问题能快速抽象建模;并且图表相比文字,更容易让我们理解和沟通,使用统一的规范也能减少人与人之间交流成本,是系统设计人员的必备工具。
要用好 UML 首先要认识清楚各种 UML 图,目前 UML 一共有 14 种图形,整体分成结构性图形,行为式图形和交互性图形三类。
UML 作为建模语言,自然离不开对模型实体的描述和实体关系的描述。
针对实体描述,UML 主要提供以下概念:
针对实体关系的描述,UML 主要提供 6 个 概念:
最后,再对上面的六种实体关系进行总结下,实体间关系按照从强到弱,依次是:继承 -> 实现 -> 组合 -> 聚合 -> 关联 -> 依赖。结合图形符合的特点,我们可以将继承和实现为一组,组合和聚合为一组,关联和依赖为一组进行分组对比理解,来加深记忆。
描述完实体和实体关系之后,再来看下 7 个常用的 UML 图,深入了解下。
类图作为使用频率最高的 UML 图之一,描述的是系统中的类,以及类之间的各种静态关系,比如继承,实现,依赖等。类图中的类通常就是业务所涉及事物,如订单,员工等。类图中的类通常用三个矩形表示,最上面部分来标识类的名称;中间的部分标识类的属性;最下面的部分标识类的方法,如下图所示:
并且类与类之间存在的关系就跟前文介绍的六种实体关系是一致的,也会有关联、聚合、组合、继承、实现和依赖这六种。除此之外,通常在类图中两个类的关系是存在数量联系的,这种数量关系的表示形式主要有 1 (一个),0..1(零或一个),*(零或多个)这样三种,比如人与车的类关系结合数量可以用下面的简单类图描述:
有了类和关系的图形表示,我们就可以方便地表示类与类,类与接口或者接口与接口之间如何协作,使用类图能帮助我们更好理解业务实体间的联系。
用例图主要描述系统的功能需求,结合参与者(Actor)和用例,以及系统的关系,帮助我们从最终用户的角度设计系统,并且使得以一种可视化的方式理解系统的功能需求。
用例图主要由人型符号的参与者,用例,连接和系统边界组成。参与者表示用户的概念;用例表示具体的系统功能,通常由动词+名字方式命名;通信连接用来表示参与者与用例之间关系;系统边界可以是整个系统,或者某个特点模块。
掌握用例图是帮助了解系统功能需求的一项重要手段,但要知道的是它表现的是系统外层交互,表达不了系统内部的类之间的任何关系;并且不要在一个用例图中包含了太多的用例,最好能根据业务功能划分,形成多个用例图来呈现关键的功能需求。
时序图根据时间序列展示实体如何进行协作,它展示了在用例的特定场景中实体如何与实体对象交互。
时序图主要的图形符号有参与者,生命线,活动,消息调用,消息返回,自我消息,递归消息,创建信息
,销毁消息,持续消息组成。时序图在垂直方向上以发生的时间顺序显示消息调用的顺序,在水平方向上显示消息调用到的实体,借助时序图即使是非程序员也能大体看懂系统或者模块的顺序交互过程。
时序图擅长表现对象间,组件间的协作过程,当需要了解单个用例中多个对象间的行为过程时,可以使用。
状态图描述实体的不同状态和该类的状态转换过程,通过它能清楚看到实体的整个生命周期。状态关系图通常用于描述实体与状态相关的行为,并且实体对同一事件作出不同的响应取决于它处于什么状态。
如下图所示,状态图的符号有初始起点,实心圆表示;状态之间的转换,带箭头的实线表示;状态,圆角矩形表示;终止点,内部包含实心圆的圆表示。要绘制状态图,首先绘制起点和一条指向该类的初始状态的转换线段。状态本身可以在图上的任意位置绘制,然后只需使用状态转换线条将它们连接起来。
我们经常使用状态图来描述业务中一个关键实体在多个用例中的行为和状态变化情况,帮助我们理解不同状态下实体行为的变化。
活动图表示在处理某个活动时,两个或者更多类对象之间的过程控制流,用于展示具体的控制流程。活动图最适合用于对较高级别的过程建模,比如公司当前在如何运作业务,或者业务如何运作等,相比时序图更加易懂。
活动图的符号集与状态图中使用的符号集类似,从一个连接到初始活动的实心圆开始,到内部包含实心圆的圆结束,活动间可以通过带箭头的实现连接,活动图还可以表达角色与活动间的关系,将角色在首部显示,在这里叫做泳道,通过跨泳道的信息交互可以更好的表达出对象间与活动间的信息交互。
活动图能清晰地表达事物的处理流程,是工作流建模和过程建模的重要工具。
组件图描绘了组件如何连接在一起以形成更大的组件或软件系统。它展示了软件组件的体系结构以及它们之间的依赖关系。这里的软件组件包括运行时组件,可执行组件和源代码组件。
组件图符号集合主要有组件接口,子系统,端口,关系组成,当我们需要将系统划分为组件,并希望通过接口来显示它们的相互关系或将组件分解为更低层次的结构时,就可以使用组件图来实现目的。
部署图描述软件系统如何部署到物理环境中去,表明了硬件配置与软件之间的关系。
部署图中的符号包括组件图中所使用的符号元素,还新增了一些符号,比如表示机器的节点符号,表示软件的构件等。
利用部署图,我们就能很方便地看出哪些软件部署在哪里地方,它们将如何彼此通信,因此使用好部署图,对于我们规划系统的体系结构和节点部署都有很帮助。
说完上述常用的 UML 图,我们再来结合软件设计的三大阶段:需求分析,概要设计,详细设计来说明下每个阶段下,一般需要画哪些 UML 图。
首先是需求分析阶段,在此阶段主要就是明确好用户对软件的需求,定义清楚“要解决什么问题”,一般需要使用的 UML 图有:用例图,时序图,活动图,状态图。并且处于该阶段的相关人员为用户,客户,产品经理和项目经理等。
接下来在概要设计阶段,确定系统模块的划分和技术栈,说明软件的整体实现思路和关键难点,通常会用上的 UML 图有:时序图,活动图,组件图,部署图;相关人员为管理人员,开发人员和架构师。
最后一个是详细设计阶段,主要是针对概要设计进一步细化,说明每个模块的分工和实现细节,通常需要用到 UML 图有:类图,时序图,活动图,状态图;相关人员为管理人员,开发人员和架构师。
在选择使用 UML 图时我们要明确了所要表达设计意图,选对合适的图形,才能发挥出 UML 图的价值,表达清楚问题和方案。
参考资料