统一建模语言UML(Unified Modeling Language)是非专利的第三代建模和规约语言。UML是一种开放的方法,用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的开放方法。UML展示了一系列最佳工程实践,这些最佳实践在对大规模,复杂系统进行建模方面,特别是在软件架构层次已经被验证有效。算法
UML定义了5类,10种模型图:数据库
1.用例图:从用户角度描述系统功能,并指各功能的操做者。
2.静态图:包括类图,包图,对象图。
类图:描述系统中类的静态结构
包图:是包和类组成的,表示包与包之间的关系,包图描述系统的分层结构
对象图:是类图的实例
3.行为图:描述系统动态模型和对象组成的交换关系。包括状态图和活动图
活动图:描述了业务实现用例的工做流程
状态图:是描述状态到状态控制流,经常使用于动态特性建模
4.交互图:描述对象之间的交互关系
顺序图:对象之间的动态合做关系,强调对象发送消息的顺序,同时显示对象之间的交互
合做图:描述对象之间的协助关系
5.实现图:
配置图:定义系统中软硬件的物理体系结构编程
UML的目标是以面向对象图的方式来描述任何类型的系统,具备很宽的应用领域。其中最经常使用的是创建软件系统的模型,但它一样能够用于描述非软件领域的系统,如机械系统、企业机构或业务过程,以及处理复杂数据的信息系统、具备实时要求的工业系统或工业过程等。总之,UML是一个通用的标准建模语言,能够对任何具备静态结构和动态行为的系统进行建模。架构
此外,UML适用于系统开发过程当中从需求规格描述到系统完成后测试的不一样阶段。在需求分析阶段,能够用用例来捕获用户需求。经过用例建模,描述对系统感兴趣的外部角色及其对系统(用例)的功能要求。分析阶段主要关心问题域中的主要概念(如抽象、类和对象等)和机制,须要识别这些类以及它们相互间的关系,并用UML类图来描述。为实现用例,类之间须要协做,这能够用UML动态模型来描述。在分析阶段,只对问题域的对象(现实世界的概念)建模,而不考虑定义软件系统中技术细节的类(如处理用户接口、数据库、通信和并行性等问题的类)。这些技术细节将在设计阶段引入,所以设计阶段为构造阶段提供更详细的规格说明。并发
编程(构造)是一个独立的阶段,其任务是用面向对象编程语言未来自设计阶段的类转换成实际的代码。在用UML创建分析和设计模型时,应尽可能避免考虑把模型转换成某种特定的编程语言。由于在早期阶段,模型仅仅是理解和分析系统结构的工具,过早考虑编码问题十分不利于创建简单正确的模型。异步
UML模型还可做为测试阶段的依据。系统一般须要通过单元测试、集成测试、系统测试和验收测试。不一样的测试小组使用不一样的UML图做为测试依据:单元测试使用类图和类规格说明;集成测试使用部件图和合做图;系统测试使用用例图来验证系统的行为;验收测试由用户进行,以验证系统测试的结果是否知足在分析阶段肯定的需求。编程语言
总之,标准建模语言UML适用于以面向对象技术来描述任何类型的系统,并且适用于系统开发的不一样阶段,从需求规格描述直至系统完成后的测试和维护。工具
本文主要介绍状态图和活动图。单元测试
状态(state)是指在对象的生命期中的某个条件或情况,在此期间对象将知足某些条件、执行某些活动或等待某些事件。全部对象都具备状态,状态是对象执行了一系列活动的结果,当某个事件发生后,对象的状态发生变化。测试
状态图(statechart diagram):
用来描述一个特定的对象全部可能的状态,以及因为各类事件的发生而引发的状态之间的转移和变化。
并非全部的类都须要画状态图,有明确意义的状态,在不一样状态下行为有所不一样的类才须要画状态图。以下,
一个机器的状态图
再如,CD Player的状态图
1.状态
一个状态有如下几个部分:状态名(name)、进入/退出动做(entry/exit action)、内部转移(internal transttion)、子状态(substate)、延迟事件(dferred event)。
状态能够细分为不一样的类型,例如初态、终态、中间状态、组合状态、历史状态等。一个状态图只能有一个初态,但终态能够有一个或多个,也能够没有终态。
中间状态包括两个区域:名字域和内部转移域,如图所示。其中内部转移域是可选的。
横线上面是名字域,下面是转换域(可选)。
ntry/turnOn:当转入该状态时,作开灯动做。
do/blinkFivetimes:当处于该状态时,灯闪烁5次。do活动是只在状态内出现的活动,不能附加到转换上。
event poweroff/powerSupplySelf:当电源关闭事件发生时,用自备电源。
exit/turnOff:当转出该状态时,作关灯动做。
event selfTest/defer:当selfTest事件发生时,对象将延迟响应,到别的状态中再处理,用defer这个特定动做表示延迟。
2.状态图的要素
椭圆或圆角矩形:表示对象的一种状态,椭圆内部填写状态名
箭头:表示从箭头出发的状态能够转换到箭头指向的状态
事件:引发状态转换的缘由。事件名可在箭头线上方标出
条件:事件名后加方括号,括号内写状态转换条件
实心圆:初始状态
内部实心的同心圆:最终状态
3.状态的类型
①按状态过程分:
②含有子状态的状态被称为组合或嵌套状态
组合状态可使用“与”关系分解为并发子状态,或者经过“或”关系分解为互相排斥的顺序子状态。两种表示方法:
顺序子状态
若是一个组成状态的子状态对应的对象在其生命期内的任什么时候刻都只能处于一个子状态,即多个子状态之间是互斥的,不能同时存在,这种子状态称为顺序子状态。
并发子状态
有时组合状态有两个或者多个并发的子状态机,此时称组成状态的子状态为并发子状态。
③历史状态是伪状态, 其目的是记住从组合状态中退出时所处的子状态, 当再次进入组合状态时, 能够直接进入这个子状态, 而不是再从组合状态的初态开始。
CD Player,running状态被打断到power on状态,再转回到running状态时,但愿直接进入历史状态
4.转移(Transition)
转移是两个状态间的一种关系,表示对象将在当前状态中执行动做,并在某个特定事件发生或某个特定的条件知足时进入后继状态。 每一个转移只容许有一个事件触发,一个事件只容许有一个动做。
①转移的五要素(注意格式)
格式:事件(参数)[条件]/动做
?源状态
?目标状态
?触发事件
-若是箭头上不带任何事件名,表示是一个自动转换,当与源状态相关的活动完成时就会自动触发。
?监护条件
?动做
②转换的类型
内部转移:不致使状态改变的转移,不会执行entry和exit动做
5.事件(Event)
事件是对一个时间和空间上占有必定位置的有意义的事情的规格说明。事件触发状态的转移。
四类主要事件:
?信号事件
?调用事件
?变化事件
?时间事件
①信号signer事件
对象之间经过发送信号和接收信号实现通讯。信号是一种异步机制。在计算机中,鼠标和键盘的操做均属于此类事件。对于一个信号而言,对象通常都有相应的事件处理器,如onMouseClick()等。
②调用call事件
表示一个操做的调度。一个对象请求调用另外一个对象的操做
信号是一个异步事件,而调用事件通常是同步的。也就是说,当对象调用另外一对象的操做时,控制就从发送者传送到接收者,该事件触发转换,完成操做后,接收者转换到一个新的状态,控制返还给发送者。
③变化change事件
用关键字When,后面跟布尔表达式
When(temperature>120)/alerm()
变化事件的意图是要频繁测试表达式,只要表达式由假变为真,事件就会发生。
注意: 变化事件与监护条件的区别
④时间(time)事件
时间事件是指在绝对时间或在某个时间间隔内发生的事情所引发的事件。
例如到达某一时间或通过了某一时间段。用关键字When 或After表示。
6.状态图建模技术
建模步骤:
①找出适合用模型描述其行为的类。
②肯定对象可能存在的状态。
③肯定引发状态转换的事件。
④肯定转换进行时对象执行的相应动做。
⑤对建模的结果进行相应的精化和细化。
1. 活动图的概念
活动图(activity diagram)是UML的动态视图之一,用来描述事物或对象的活动变化流程。活动图可看做状态图的特殊形式。特殊性在于活动图中的一个活动结束后将当即进入下一个活动而不须要事件触发活动的转移。
活动图用于描述系统的工做流程和并发行为。活动图被设计用于简化描述一个过程或操做的工做步骤。例如,能够用活动图对一个软件的开发过程建模;还能够对诸如求Fibnacci数列第n个数的数值之类的操做进行建模。
活动图示例:
2.活动图的组成元素:
?活动(Activity)
?动做流(Action Flow)
?分支(Branch)与合并(Merge)
?分叉(Fork)和汇合(Join)
?泳道(Swimlane)
?对象流(Object Flow)
3.活动
活动(activity)表示的是某流程中的任务的执行,它能够表示某算法过程当中语句的执行。活动在活动图中表现为一个由一系列动做组成的非原子的执行过程。
动做状态(Action State)
活动状态(Activity State)
①动做状态
动做状态是指执行原子的、不可中断的动做,并在此动做完成后经过完成转换转向另外一个状态的状态。
动做状态使用平滑的圆角矩形表示,动做状态所表示的动做写在圆角矩形内部。
②活动状态
活动状态是可分解的,不是原子的,其工做的完成须要必定的时间。
可把动做状态看做活动状态的特例。
活动状态的表示图标也是平滑的圆角矩形,并能够在图标中给出入口动做和出口动做等信息。
4.动做流
全部动做状态之间的转换流称之为动做流。
活动图的转换不须要特定事件的激发,一个动做状态执行完后自动转换到另一个状态。
活动图的转换用带箭头的直线表示。
可用条件限制转换。
5.分支与合并
分支通常用于表示对象类所具备的条件行为。
条件行为用分支和合并表达。
一个分支有一个入转换和两个带条件的出转换,出转换的条件应当是互斥的。
一个合并有两个带条件的入转换和一个出转换,合并表示从对应的分支开始的条件行为的结束。
6.分叉与汇合
分叉用于将动做流分为两个或者多个并发运行的分支,而汇合则用于同步这些并发分支,以达到共同完成一项事务的目的。
分叉能够用来描述并发线程。
汇合表明两个或多个并发控制流同步发生,当全部的控制流都达到汇合点后,控制才能继续往下进行。
7.泳道
泳道将活动图中的活动化分为若干组,并把每一组指定给负责这组活动的业务组织,一般为对象。
泳道区分了负责活动的对象,明确地表示了哪些活动是由哪些对象进行的。
每一个活动只能明确地属于一个泳道。
泳道用垂直实线绘出,垂直线分隔的区域就是泳道。在泳道上方能够给出泳道的名字或对象(对象类)的名字,该对象(对象类)负责泳道内的所有活动。
泳道没有顺序,不一样泳道中的活动既能够顺序进行也能够并发进行,动做流和对象流容许穿越分隔线。
8.活动的分解
一个活动能够分为若干个动做或子活动,这些动做和子活动自己能够组成一个活动图。
一个不含内嵌活动或动做的活动称之为简单活动;一个嵌套了若干活动或动做的活动称之
为组合活动,组合活动有本身的名字和相应的子活动图。
一个包含子活动的活动和嵌套了子状态的组合状态相似,概念上也相对统一。
9.活动图的用途
?对系统工做流程建模
工做流:是一个良好定义的动做序列,执行时将产生一个可观察的值,或者产生一个个体或实体的对象。
?对工程组织过程建模
?对算法流程建模
①对系统工做流的建模
10.活动图建模技术
①识别要对其工做流描述的类或对象。
②肯定工做流的初始状态和终止状态,明确工做流的边界。
③对动做状态或活动状态建模。
④对动做流建模。
⑤对对象流建模。
⑥对创建的模型进行精化和细化
1.活动图与状态图的相同点:
都是对系统的动态行为建模。
2.活动图与状态图的区别:
①描述对象不一样
状态图:描述对象状态及状态之间的转移;
活动图:描述从活动到活动的控制流。
②使用场合不一样
状态图:描述对象在其生命期中的行为状态变化;
活动图:描述过程的流程变化。
附:IBM.Rational.Rose.Enterprise.v7.0破解版下载
完