UML是统一建模语言(Unified Modeling Language)的简称,是一种由一整套图表组成的标准化建模语言,用于帮助系统开发人员来说明、可视化、构建和记录软件系统的产出。用人话说 UML 就是用图形符号帮助我们描述系统和设计系统的语言工具。UML 最初由 Rumbaugh,Booch 和 Jacobson 三人于 1994-1995 合作开发,后面随着参与 UML 建设的组织越来越多,比如微软,甲骨文,IBM等等,UML 1.0 版本在 1997 年正式推出,随着不断改良完善,现在的 UML 版本更新到了 2.5。
UML 作为建模语言,自然离不开对模型实体的描述和实体关系的描述。针对实体描述,UML 主要提供以下概念:参与者(Actor):用户在系统扮演的角色,这里的参与者可以是人,也可以是一个外部系统。类:对一组具有相同属性、方法、关系和语义的对象的描述。接口:一组操作的规范,没有具体的实现。用例:一组由一个共同的目标捆绑在一起的场景,总是由参与者发起。包:UML 中对模型进行组织的分组单位。组件:一个系统中提供一个或者多个接口的封装模块。注释:一个用来对元素或元素符号进行注解或约束时所用的符号。节点:表示具有一个内存和计算能力的物理元素。针对实体关系的描述,UML 主要提供6个概念:关联、聚合、组合、泛化、依赖、包含;关联关系包括关联、泛化关系;聚合关系包括整体与部分;组合关系包括组合;依赖关系包括关联根和派生自;包含关系只有一种——包含。
实体关系是用于描述不同实体之间的联系,常见的关系有6种:关联、聚合、组合、泛化、实现和依赖。关联指的是单向关系,当一个实体访问另一个实体时,箭头指向被拥有者;聚合表示整体与局部的关系,用带空心菱形的实线表示,菱形指向整体,箭头指向局部实体;组合表示整体与局部的关系,但是比聚合关系更严格,实体间伴随着相同的生命周期,图形表示为带实心菱形和箭头的实线;泛化表示实体之间的继承关系,用带三角箭头的实线表示,指向的一方为父实体;实现表示抽象实体与具体实体之间的关系,图形表示为带三角箭头的虚线,指向的一方为抽象实体;依赖表示当一个实体的改变会影响到另一个实体时这两个实体之间的关系。
在对这6种实体关系进行总结后,可以发现它们按照从强到弱的顺序依次是:继承 > 实现 > 组合 > 聚合 > 关联 > 依赖。为了加深记忆,可以将继承和实现分为一组,组合和聚合分为一组,关联和依赖分为一组进行分组对比理解。
除了上述六种实体关系外,还有7个常用的UML图,其中之一就是类图。类图用于描述系统中的类以及类之间的各种静态关系,如继承、实现、依赖等。类图中的类通常代表业务所涉及的事物,如订单、员工等。类图中的类通常用三个矩形表示,最上面部分标识类的名称;中间的部分标识类的属性;最下面的部分标识类的方法。此外,类与类之间存在的关系还涉及到数量联系,主要有1(一个)、0..1(零或一个)和 * (零或多个)这三种表示形式。例如,人与车的类关系结合数量可以用简单的类图进行描述。
有了类和关系的图形表示,我们就可以方便地表示类与类、类与接口或者接口与接口之间如何协作。使用类图能帮助我们更好理解业务实体间的联系。用例图主要描述系统的功能需求,结合参与者(Actor)和用例,以及系统的关系,帮助我们从最终用户的角度设计系统,并且使得以一种可视化的方式理解系统的功能需求。用例图主要由人型符号的参与者、用例、连接和系统边界组成。参与者表示用户的概念;用例表示具体的系统功能,通常由动词+名字方式命名;通信连接用来表示参与者与用例之间关系;系统边界可以是整个系统,或者某个特点模块。掌握用例图是帮助了解系统功能需求的一项重要手段,但要知道的是它表现的是系统外层交互,表达不了系统内部的类之间的任何关系;并且不要在一个用例图中包含了太多的用例,最好能根据业务功能划分,形成多个用例图来呈现关键的功能需求。
时序图根据时间序列展示实体如何进行协作,它展示了在用例的特定场景中实体如何与实体对象交互。时序图主要的图形符号有参与者、生命线、活动、消息调用、消息返回、自我消息、递归消息、创建信息、销毁消息、持续消息组成。时序图在垂直方向上以发生的时间顺序显示消息调用的顺序,在水平方向上显示消息调用到的实体,借助时序图即使是非程序员也能大体看懂系统或者模块的顺序交互过程。时序图擅长表现对象间、组件间的协作过程,当需要了解单个用例中多个对象间的行为过程时,可以使用。
状态图描述实体的不同状态和该类的状态转换过程,通过它能清楚看到实体的整个生命周期。状态关系图通常用于描述实体与状态相关的行为,并且实体对同一事件作出不同的响应取决于它处于什么状态。如下图所示,状态图的符号有初始起点、实心圆表示;状态之间的转换、带箭头的实线表示;状态、圆角矩形表示;终止点、内部包含实心圆的圆表示。要绘制状态图,首先绘制起点和一条指向该类的初始状态的转换线段。状态本身可以在图上的任意位置绘制,然后只需使用状态转换线条将它们连接起来。我们经常使用状态图来描述业务中一个关键实体在多个用例中的行为和状态变化情况,帮助我们理解不同状态下实体行为的变化。
活动图表示在处理某个活动时,两个或者更多类对象之间的过程控制流,用于展示具体的控制流程。活动图最适合用于对较高级别的过程建模,比如公司当前在如何运作业务或者业务如何运作等。相比时序图更加易懂。
UML 是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言,是非专利的第三代建模和规约语言。UML 是面向对象设计的建模工具,独立于任何具体程序设计语言。UML 应用场景是在开发阶段,说明、可视化、构建和书写一个面向对象软件密集系统的制品的开放方法。
UML 有多种图,包括用例图、时序图、类图、活动图、状态图等。在需求分析阶段,主要就是明确好用户对软件的需求,定义清楚“要解决什么问题”,一般需要使用的 UML 图有:用例图,时序图,活动图,状态图;相关人员为用户,客户,产品经理和项目经理等。