UML基础知识扫盲
UML这三个字母的全称是Unified Modeling Language,直接翻译就是统一建模语言,简单地说就是一种有特殊用途的语言。
你可能会问:这明明是一种图形,为什么说是语言呢?伟大的汉字还不是从图形(象形文字)开始的吗?语言是包括文字和图形的!其实有很多内容文字是无法表达的,你见过建筑设计图纸吗?里面还不是很多图形,光用文字能表达清楚建筑设计吗?在建筑界,有一套标准来描述设计,同样道理,在软件开发界,我们也需要一套标准来帮助我们做好软件开发的工作。UML就是其中的一种标准,注意这可不是唯一标准,只是UML是大家比较推崇的一种标准而已,说不定以后有一个更好的标准可能会取代她呢!UML并不是强制性标准,没有法律规定你在软件开发中一定要用UML,不能用其它的,我们的目标是善用包括UML在内的各种标准,来提高我们软件开发的水平。
UML有什么用?
有很多人认为,UML的主要用途就是 软件设计 !也有人认为,如果你不是开发人员,是难以理解UML的。
然而我第一次在实际工作中应用UML的却不是软件设计,而是软件 需求分析 !当时我们和客户面对面沟通调研 需求 的时候,直接用 类图 、 顺序图 、 活动图 、 用例图 等UML。我们并没有因此和客户无法沟通,反而是沟通得更加顺畅。客户在我们的引导下,很快就会读懂这些UML图,因为UML图,让我们和客户的沟通效率和效果更好!你可能觉得很神奇,在后续章节中,我将会为你逐一揭开神奇背后的“秘密”。
UML可帮助我们做 软件需求 分析和软件设计的工作,在我工作中大概各占了50%的比例,当然在你的实际工作中不一定是这样的比例。UML会让你的需求分析或者软件设计工作更上一层楼,本书将会介绍UML在需求分析方面的 最佳实践 。
告诉你一个秘密,UML应用于软件需求分析时,其学习门槛将会大大降低!语法复杂度会降低,而且你基本不需要掌握软件开发的知识。只要你对软件需求分析感兴趣,认真学习和应用UML,就很有机会成为软件需求分析高手。
UML有很多种图,大体可以分为两类:
结构型的图(Structure Diagram )
类图(Class Diagram)
对象图(Object Diagram)
构件图 (Component Diagram)
部署图 (Deployment Diagram)
包图 (Package Diagram)
行为型的图(Behavior Diagram)
活动图(Activity Diagram)
状态机图 (State Machine Diagram)
顺序图(Sequence Diagram)
通信图(Communication Diagram)
用例图(Use Case Diagram)
时序图 (Timing Diagram)
本书所描述的UML的各种图的名字,以上述的为准。
UML各种图的中文译名,因为翻译的原因可能会有所不一样,如:Sequence Diagram和Timing Diagram有时候都会被译成“时序图”,这是最让人困扰的地方!Sequence Diagram 除了被译为顺序图,还有 序列图 的译法。
中国软件行业协会(CSIA)与日本 UML建模 推进协会(UMTP)共同在中国推动的UML专家认证,两个协会共同颁发认证证书、两国互认,CSIA与UMTP共同推出了UML中文术语标准,该标准全称为:CSIA-UMTP UML中文术语标准v1.0(本书后文将会简称为UML中文术语标准)。本书将会遵循UML中文术语标准,并且我们会同时给出中文译名和英文原名,大家要留意看英文名字噢,这样能帮助你不会被众多的中文译名混淆。
UML图为什么会分为结构型和行为型两种呢?
顾名思义,结构型的图描述的是某种结构,这种结构在某段时间内应该是稳定的,“静态”的;而结构型的图描述的是某种行为,是“动态”的。
分析系统需求时,我们会面对很多业务概念,它们之间会有某些关系,这些内容可以看成是“静态”的,我们可以利用UML的结构性的图来分析。同时,业务会涉及大量的流程、过程等,这些内容是“动态”的,我们可以用行为型的UML图来分析。
在我们软件设计时,我们需要考虑需要那些类、哪些构件、系统最后怎样部署等,这些内容可以看成是“静态”的,我们可以利用UML的结构型的图来设计。同时,我们也需要考虑软件如何和用户交互,类、构件、模块之间如何联系等“动态”内容,我们可以利用行为型的图来设计。
所谓“静态”和“动态”不是绝对的,下文我们将会进一步介绍结构型的UML和行为型的UML。通过下面的学习,你将会初步认识UML的各种图,你可能还会有很多问题,本章的主要目的是让你对UML有一个宏观的认识
结构型的UML(Structure Diagram)
类图(Class Diagram)
请看下面这个类图:
行为型的UML(Behavior Diagram)
活动图、状态机图、顺序图处于三种不同的角度来描述流程,是分析业务流程的三种不同利器,下面将会逐一说明。
活动图(Activity Diagram)
我们将起床到出门上班这个过程画成活动图,可能是这样的:
图 1.7 起床到出门上班的活动图
活动图中的一个圆边框框表示一个“活动”,多个活动之间的带箭头线条表示活动的先后顺序,该图只是表达了一个顺序流程,活动图还可以表达分支结构。如果你以前曾学过流程图的话,你会发现活动图和流程图很相似。活动图可能是三种能表示流程的UML图中最接近我们思维习惯的一种,下面来学习另外两种能表达流程的图。
状态机图(State Machine Diagram)
状态机图又叫状态图,但状态图这个译名并没有译出Machine的意思。
状态机图从某个物品的状态是如何变化的角度来展示流程,下图某请假条审批流程:
图 1.8 请假处理流程
整个请假审批流程是围绕“请假条”这个物体进行的,随着不同的审批阶段,请假条具备不同的状态。我们分析业务流程时会发现很多流程其实是围绕某个物品进行的,这时可考虑使用状态机图。
顺序图(Sequence Diagram)
你去餐厅吃饭,向服务员点餐到服务员送菜上来,这个过程用顺序图可表示如下:
图 1.9 点菜的顺序图
该图有三个“小人”,每个“小人”下面的文字说明(如:顾客)表示其代表的角色。角色与角色之间有一些线条链接,表示角色之间是如何交互的。该图表示的意思是:顾客向服务员点菜后,服务员将点菜信息传递给厨师,然后厨师做菜,最后再由服务员送菜给你。
点菜过程涉及几个环节,每个环节均由不同的角色来负责,如果遇到类似的情况,你可以考虑使用顺序图来分析。用顺序图来分析的好处是能清晰表达整个过程所参与的角色,角色与角色之间的关系,各角色是如何被卷入这个过程当中的。
通信图(Communication Diagram)
UML1.1时,该图英文名为Collaboration Diagram;UML2.x时,英文名为Communication Diagram。将英文名字直接翻译,原来的英文名字可译为协作图,而新的英文名字译为通信图。
通信图是顺序图的另外一种画法,点菜的顺序图,如果用通信图来画可表示如下:
图 1.10 点菜的通信图
三个“小人”分表表示三种角色:顾客、服务员、厨师;角色之间有直线联系表示他们之间有关系;带序号的文字和箭头,表示角色之间传递的信息。
顺序图更强调先后顺序,通信图更强调相互之间的关系。我觉得顺序图实用性更好一点,比通信图能表达更多的信息,更容易读懂,在需求分析工作中我基本不会使用通信图。
用例图(Use Case Diagram)
下图是用例图的示意图:
图 1.11 用例图
用例图表达的是什么角色通过软件系统能做什么事情,我们可以使用用例图系统地表达软件系统的绝大部分需求。
时序图(Timing Diagram)
时序图也叫时间图,时序图是UML中文术语标准的说法,而时间图不是标准的说法。
时序图是表示某东西的状态随时间变化而变化的一种图,参见下图:
图 1.12 灯的开关状态随时间变化图
此图表示在0秒到30秒,灯的状态是关的,30-60秒灯的状态为开,60秒后状态为关。
在实际工作中我基本上没有试用过时间图。
下面通过这个表格来总结一下我在需求分析工作中应用各种UML图的情况:
表 1.1 各种UML图实际应用情况
上表是根据我的工作经验总结的,相信会适用于很多情况。但每个人的工作经历、情况、环境等不太一样,上表仅作参考。