状态机图(StatemachineDiagram)状态(state):定义对象在其生命周期中的一种条件或状况比如:满足某些条件、执行某些活动或等待某些事件例子:灯的开闭、人的梦醒、学生的课上与课下理解状态的存在:对象在任何时刻都会处于某种状态之中状态的转移:事件使对象从一个状态转向另一个状态当面对所检测到的事件或所接收到的消息时,对象所处的状态不同,做出的反应也不同状态机图(StatemachineDiagram)状态机(statemachine):一种逻辑上的流程机用于描述一个对象在其生命周期中的动态行为表现对象响应事件所经历的状态序列以及伴随的动作状态图和活动图用于描述一个状态机(状态机图)活动图强调了从活动到活动的控制流状态图强调了从状态到状态的转换状态图状态图的作用描述一个特定对象的所有可能状态以及由于各种事件的发生,而引起的状态间的转移状态图状态图的组成节点是状态:包括初始状态和终止状态,用圆角矩形表示关系是转换(或转移):用状态之间包含一些文字描述的有向箭头线表示状态状态的几种类型1.初态和终态2.中间状态3.组合状态4.历史状态1.初态和终态初态(Startstate)显示状态图中状态机的执行的开始一个状态机只能有一个初态,因为每一个执行都是从相同的地方开始的。如果一个状态机用多张图描述,则多张图用同一个初态嵌套状态中可以使用新的初态终态(EndState)表示一个最后的或者终端状态终态的数目可以不确定2.中间状态中间状态的组成1)状态名(Name)2)进入/退出动作(entry/exitaction)2.中间状态3)内部转换(InternalTransition)不导致状态改变的转换,不会执行entry和exit动作语法格式:event事件名/动作表达式2.中间状态4)子状态(Substate)嵌套在另外一个状态中的状态2.中间状态4)子状态(Substate)嵌套在另外一个状态中的状态3.组合状态(compositestate)含有子状态的状态被称为组合状态1.顺序组合状态图2.并发组合状态图顺序组合状态图并发组合状态图在UML2.0中已经废弃了同步状态4.历史状态(Historystate)历史状态是一种伪状态可以存储退出组合状态时所处的子状态,则返回组合状态时可以直接回到相应的子状态转换的五要素源状态(SourceState):转换激发之前对象所处的状态目标状态(TargetState):转换完成后对象所处的状态触发事件(TriggerEvent):引起转换发生的事件监护条件(GuardCondition):方括号括起来的布尔表达式,用于决定是否激活转换动作(Action):转换激活时对象执行的操作智能水壶的状态图打开[有水]/烧水:打开:触发事件有水:监护条件烧水:动作信用卡状态图无触发转移定义:状态转移不是因为某个事件触发引起的而是由于对象完成了某些活动,而引起的状态的转变触发事件的四种类型信号事件对象之间通过发送信号和接收信号实现通信信号是两个对象之间通信的媒介,它是一种异步机制在计算机中,鼠标和键盘的操作均属于此类事件对于一个信号而言,对象一般都有相应的事件处理器,如onMouseClick()等调用事件调用某个对象的成员方法就是调用事件,它是一种同步的机制。例如:在烧水器的状态图中,turnOn就是一种调用事件,用来将开关置于“On”状态。触发事件的四种类型改变事件某个指定属性值为真时,事件得到触发。在对象生命周期内,一直在计算改变事件中的属性值。当属性值为真时,事件触发,计算停止例如:when(temperature100)/alerm()时间事件当时间流逝到某个时刻,触发事件对对象起作用它可以指定为绝对形式,也可以指定为相对形式。其他事件延迟事件(Deferredevent)延迟到下一状态中处理的事件是一种特殊的事件,它是指该事件不会触发状态的转换,当对象处于该状态时事件不会丢失,但会被延迟执行例如,当E-mail程序中正在发送第一封邮件时,用户下达发送第二封邮件执令就会被延迟,但第一封邮件发送完成后,这封邮件就会被发送。这种事件就属于延迟事件转换类型状态图应用为对象生命周期建模:主要描述对象能够响应的事件、对这些事件的响应以及过去对当前行为的影响为反应型对象建模:这个对象可能处于的稳定状态、从一个状态到另一个状态之间的转换所需的触发事件,以及每个状态改变时发生的动作状态机图既可以用来表示一个业务领域的知识,也可以用来描述设计阶段对象的状态变迁绘制状态机图的步骤寻找主要的状态确定状态之间的转换细化状态内的活动与转换用复合状态来展开细节状态图(购物网站)当从状态“结账”和“显示购物车”返回子状态“显示索引信息”时,将进入的是离开时的历史状态。也就是说,转到购物或结账区之后,再回到“浏览目录”的页面时,其中的内容是不变的,仍保留原来的信息。状态图(CD播放机)状态图(智能卡系统)阅读状态图状态图(订单处理1)订单处理办理发货之前需要检查商品,查看是否齐全。如果缺部分商品,则进入等待状态(直至商品齐全)货品发出之前,任何时候都可以取消订单状态图(订单处理2)状态图(订单处理3)状态图(航班预订1)状态图(航班预订2)细化状态内的活动与转换状态图(航班预订3)使用复合状态课堂练习绘制电脑工作时的状态转换图课堂练习绘制手机工作时的状态转换图课堂练习(电梯系统的状态图)电梯开始处于空闲状态(idle),当有人按下按钮要求使用电梯时(事件isrequired发生),电梯进入运行状态(run)。如果电梯的当前楼层比想要的楼层高时(监护条件[currentFloordesiredFloor]成立),电梯进入下降状态(movingdown);反之,如果电梯的当前楼层比想要的楼层低时(监护条件[currentFloordesiredFloor]成立),电梯进入上升状态(movingup);如果电梯的当前楼层与想要的楼层相同时(监护条件[currentFloor=desiredFloor]成立),电梯门打开(dooropen)。在电梯上升或下降期间,每经过一个楼层就判断监护条件[currentFloor=desiredFloor]是否成立,若不成立,继续移动,若成立,就进入停止状态(stop),15秒后,电梯门自动打开(dooropen),2分钟后,电梯门自动关上(doorclose),如果有更多的电梯使用要求,进入运行状态(run),反之,则进入空闲状态(idle)。课堂练习(电梯系统的状态图)带有复杂转换的状态图补充说明(状态图)适用情况:适用于描述跨越多个用例的单个对象行为不适合描述多个对象之间的行为协作故需与其他技术(类图、对象图)结合使用注意事项:不要花费大量时间和精力为系统中的每个类都画对应的状态图开发人员只关心关键类的行为,只需为这些类建立状态图,帮助理解所研究的问题活动图(ActivityDiagram)概念:由活动节点和转换流程构成的状态机图作用:描述系统或业务的活动序列构成的控制流用来描述事物或对象的活动变化流程为系统或业务工作流程和用例实现建模活动图(ActivityDiagram)活动图与流程图:流程图:表示算法的执行序列、过程、判定点、分支和循环活动图:支持并行活动,支持多线程编程活动图的应用:描述类的操作描述用例的执行过程活动图的缺点:难以清楚地表示对象和动作之间的关系活动图(ActivityDiagram)与状态图的区别状态图由某个对象的状态序列组成,以状态为中心活动图由某个过程中若干对象的活动序列组成,以活动为中心活动图(ActivityDiagram)组成元素活动节点起点和终点(即初态和终态)中间活动节点转换流程转换分支与合并分叉与汇合活动节点活动节点是活动图中最主要的元素之一,用来表示工作过程中的一个(或多个)工作步骤表示方法:用一个圆角矩形表示,活动的名称写在圆角矩形内部活动节点的表示活动节点动作状态:原子性的动作或操作的执行状态,不能被外部事件的转换中断活动状态:非原子性的,可以分解成其他子活动或动作状态,可以从外部中断。可以在图标中给出入口动作和出口动作等信息组合活动:一种内嵌活动图的状态,用于表示复杂的活动转换(StateTransition)作用:当一个活动结束时,活动控制流马上转向下一个活动节点表示方法:一条带箭头的直线转换的表示分支与合并(决策)程序控制流的三种基本结构:顺序、分支、循环分支:用于将一条转换路径分成多个部分,每一部分都有单独的监护条件和不同的结果当动作流遇到分支时,会根据监护条件的真假来判定动作的流向注意:分支的每个路径的监护条件应该是互斥的,因此只有一条路径的转换会被激发分支的表示条件互斥分支与合并(决策)合并:两个或者多个控制路径在此汇合的情况,表示从对应分支开始的条件行为的结束合并和分支都使用菱形表示,且常常成对使用省略表示分支与合并的菱形不会丢失任何信息分叉与汇合(同步)分叉与汇合:都用来表示并发执行的活动分叉线和汇合线(同步线):都使用加粗的水平线或垂直线段表示分叉:一个进入转换,多个离去转换表明系统从单一的过程变为过个并发的过程分叉与汇合(同步)汇合:多个进入转换,一个离去转换表示系统将结束多个并发过程,再次进入单一的过程注意:当且仅当所有的并发分支都到达汇合点后,活动流程才能进入下一个活动节点示例(同步)商品打包与付款两个活动是并行的即:这两个活动的执行顺序是任意的可以先后进行可以同时交叉进行泳道泳道技术:将活动用线条分成一些纵向的矩形,每个矩形属于一个特定的对象或部门对象的名字放在泳道的顶部属于该对象的所有活动都被放在泳道的区域内绘制顺序方法一:先确定参与活动的对象然后分析在整个过程中每个对象的活动方法二:先对活动进行全局的分析再将活动分配各具体的对象建议:两种方法各有利弊根据个人习惯和具体情况而定分类(1.简单活动图)分类(1.简单活动图)分类(2.标识泳道的活动图)泳道(SwimLane):用于有效地标识每个活动的实施者。表示方法:用一条垂直的线将活动分开每个泳道都有一个唯一的名称每个活动节点、分支必须只属于一个泳道;而转换,分叉与汇合是可以跨泳道的。分类(2.标识泳道的活动图)分类(3.标识对象流的活动图)某些活动中,对象与节点活动是紧密相关的:活动节点创建、删除或输出一些对象经过活动处理,修改了对象的状态对象流描述了活动与对象之间的关系,表示了活动使用对象以及活动对对象的影响。用户可以在活动图中把相关的对象标识出来标识哪些对象进入活动节点标识哪些对象从活动节点中输出分类(3.标识对象流的活动图)注册(活动图)构建活动图1.业务分析阶段活动图中每一条泳道表示一个职责单位(个人或部门),每个泳道的执行者体现了职能部门的工作职责、业务范围、部门之间的交互关系2.系统分析和设计阶段用活动图对对象的职责进行建模,每一个对象占据一个泳道,而活动是该对象的成员方法本阶段采用带泳道活动图的情况较少,因为序列图会更好地体现对象间的交互关系。活动图更适合于对复杂用例中的事件流进行建模课堂练习一个咨询公司会见新客户时的业务过程:1、公司业务员打电话给客户确定一个约定2、如果约定地点是在公司之内,那么公司中的技术人员就要为会面准备一间会议室3、如果约定地点是公司之外,那么咨询顾问就要用膝上电脑准备一份陈述报告4、咨询顾问与顾客在约定的时间和地点见面5、业务员随后给他们准备好会议用纸6、如果会议产生了一个问题陈述,咨询顾问就根据问题陈述建立一个提案并把该提案发给客户。请分别建立简单活动图和标识泳道的活动图1、确定需求用例系统管理员查看修改员工信息系统管理员是参与者,其在查看修改员工信息的活动中,共有3个用例:1.登录:要进入系统,首先要登录。2.查询员工信息:进入系统后可以选择查询不同员工的信息。3.修改员工信息:需要修改某些员工的部分信息,比如员工晋升后需要修改的员工的职务和工资信息。2、确定用例路径3、绘制完整的活动图教师查看、修改学生信息建立“教师查看、修改学生信息”用例的活动图教师在登录时,系统会验证教师输入的账号、密码