静态模型动态模型软件开发生命周期与统一建模语言第8章状态图与活动图静态模型动态模型软件开发生命周期与统一建模语言协作图的定义协作图的建模过程回顾静态模型动态模型软件开发生命周期与统一建模语言状态图的定义状态图的建模活动图的建模学习目标静态模型动态模型软件开发生命周期与统一建模语言8.1状态图(StatechartDiagram)状态机用于描述一个对象在其生存期间的动态行为,响应事件所经历的状态序列以及伴随的动作。状态图用于描述状态机,一个状态机可以用多个状态图描述。静态模型动态模型状态图与交互图的区别交互图为了显示某个特定的用例某个特定的场景下对象发生了哪些交互状态图描述对象整个生命其中表现的动态行为,对象响应事件的动作,对象的状态会发生哪些改变软件开发生命周期与统一建模语言静态模型动态模型软件开发生命周期与统一建模语言8.1.1基本概念什么是状态(state)?对象生命期中的某个条件或状况,在此期间对象将满足某些条件、执行某些活动或等待某些事件。理解对象在任何时候都会处于某种状态中,所有对象都有状态;对象所处的状态决定了它如何响应所检测到的事件或所接受的消息;通常,事件使对象从一个状态转向另一个状态(状态转移);静态模型动态模型软件开发生命周期与统一建模语言8.1.1基本概念CD播放器(正常状态下)静态模型动态模型软件开发生命周期与统一建模语言动作Action可执行的原子计算;不可中断,其执行时间可忽略不计;两种特殊动作(只要进入或离开状态都会执行该动作):进入动作(entryaction)-进入状态时执行的动作-Entry/setMode(onTrack)退出动作(exitaction)-退出状态时执行的动作-Exit/setMode(offTrack)静态模型动态模型软件开发生命周期与统一建模语言转移Transition两个状态之间的一种关系,表示对象在第一个状态执行一定的动作,并在某个特定事件发生而且满足某个条件时进入第二个状态。格式:事件(参数)[条件]/动作help[length(password)6]/verifyPassword.help()静态模型动态模型软件开发生命周期与统一建模语言事件Event是对一个时间和空间上占有一定位置的有意义的事情的规格说明;事件触发状态的转移;四类主要事件信号事件调用事件变化事件时间事件静态模型动态模型软件开发生命周期与统一建模语言8.1.2状态的类型几种状态类型:-初态-终态-中间状态-组合状态-历史状态静态模型动态模型软件开发生命周期与统一建模语言1、初态与终态初态(startstate)显示状态图中状态机的执行(execution)的开始;一个状态机只能有一个初态,因为每一个执行都是从相同的地方开始。如果一个状态机是由多个状态图描述,则多张图用同一个初态;嵌套状态中可以使用新的初态;终态(endstate)表示一个最后的或者终端状态;终态的数目可以是不确定的(可以不用画出来)静态模型动态模型软件开发生命周期与统一建模语言2、中间状态组成中间状态的组成状态名(name)进入/退出动作(entry/exitaction)内部转移(internaltransition)-不导致状态改变的转换,不会执行entry和exit动作子状态(substate)-嵌套在另外一个状态中的状态延迟事件(deferredevent)-延迟到下一状态中处理的事件静态模型动态模型软件开发生命周期与统一建模语言3、组合/嵌套状态含有子状态的状态被称为组合状态状态名(name)进入/退出动作(entry/exitaction)静态模型动态模型软件开发生命周期与统一建模语言3、组合/嵌套状态两种类型:与子状态或子状态静态模型动态模型软件开发生命周期与统一建模语言4、历史状态Historystate使用历史状态,则可以存储给退出组合状态时所处的子状态,则返回组合状态时可以直接回到相应的子状态;静态模型动态模型软件开发生命周期与统一建模语言8.1.3状态图订单处理系统静态模型动态模型软件开发生命周期与统一建模语言8.1.3状态图订单处理系统静态模型动态模型软件开发生命周期与统一建模语言8.3状态图建模技术为什么要对状态图进行建模?1.对象可能会有不同的状态,某些行为依赖于这些状态。例如,按下开关按钮时,电灯将改变当前的状态(由关变开或由开变关),因此:1.需要记录对象当前的状态2.发生了某种事件才会引起状态间的转移3.由一个状态转到另一个状态的过程通常通过方法调用实现2.状态图通常作为对类图的补充静态模型动态模型软件开发生命周期与统一建模语言8.3状态图建模技术建模步骤:①找出适合用模型描述其行为的类。②确定对象可能存在的状态。③确定引起状态转换的事件。④确定转换进行时对象执行的相应动作。⑤对建模的结果进行相应的精化和细化。静态模型动态模型软件开发生命周期与统一建模语言8.4状态图实例书的状态图:静态模型动态模型软件开发生命周期与统一建模语言8.4状态图实例借阅证的状态图:静态模型动态模型软件开发生命周期与统一建模语言8.2活动图ActivityDiagram提供了建模业务工作流的一种方法;是一种特殊的状态图;同状态图的区别:活动图用来建模某个过程的活动序列,以活动为中心;状态图用来建模对象生命周期中的所有阶段,以状态为中心;静态模型动态模型软件开发生命周期与统一建模语言8.2活动图存款静态模型动态模型软件开发生命周期与统一建模语言8.2.1基本概念活动决策同步泳道对象流和对象静态模型动态模型软件开发生命周期与统一建模语言活动动作状态指执行原子的、不可中断的动作;并在此动作完成后通过完成转换转向另一个状态的状态;动作状态使用平滑的圆角矩形表示,动作状态所表示的动作写在圆角矩形内部。静态模型动态模型软件开发生命周期与统一建模语言活动理解:①动作状态是原子的;②不可中断的状态;③瞬时的行为,它所占用的处理事件极短;④动作状态和状态图中的状态不同,它不能有入口动作和出口动作,更不能有内部转移;⑤在一张活动图中,动作状态允许多处出现。静态模型动态模型软件开发生命周期与统一建模语言活动活动状态用于表达状态机中的一个非原子的运行;可以给出入口动作和出口动作等信息;静态模型动态模型软件开发生命周期与统一建模语言活动理解:①分解成其他子活动或动作状态;②可以被中断;③活动状态的内部活动可以用另一个活动图来表示;④和动作状态不同,活动状态可以有入口动作和出口动作,也可以有内部转移;⑤动作状态是活动状态的一个特例,如果某个活动状态只包括一个动作,那么它就是一个动作状态。静态模型动态模型软件开发生命周期与统一建模语言动作流(transition)所有动作状态之间的转换流称之为动作流。与状态图的转换相同,活动图的转换也用带箭头的直线表示,箭头的方向指向转入的方向。静态模型动态模型软件开发生命周期与统一建模语言决策(decision)用于表示对象类所具有的条件行为(警戒条件);条件行为用分支和合并表达;一个分支有一个入转换和两个带条件的出转换,出转换的条件应当是互斥的,这样可以保证只有一条出转换能够被触发;一个合并有两个带条件的入转换和一个出转换,合并表示从对应的分支开始的条件行为的结束;静态模型动态模型软件开发生命周期与统一建模语言决策(decision)静态模型动态模型软件开发生命周期与统一建模语言同步(synchronization)显示业务用例的工作流程中的并行线程;分叉用于将动作流分为两个或者多个并发运行的分支;汇合则用于同步这些并发分支,以达到共同完成一项事务的目的;理解:汇合代表两个或多个并发控制流同步发生,当所有的控制流都达到汇合点后,控制才能继续往下进行。每个汇合可以有两个或多个输入转换和一个输出转换;分叉可以用来描述并发线程,每个分叉可以有一个输入转换和两个或多个输出转换,每个转换都可以是独立的控制流;静态模型动态模型软件开发生命周期与统一建模语言同步(synchronization)静态模型动态模型软件开发生命周期与统一建模语言泳道(swimlane)对活动图中的活动分组,并把每一组指定给负责这组活动的业务组织即对象;泳道区分了负责活动的对象,明确地表示了哪些活动是由哪些对象进行的;每个活动只能明确地属于一个泳道;泳道没有顺序,不同泳道中的活动既可以顺序进行也可以并发进行,动作流和对象流允许穿越分隔线。静态模型动态模型软件开发生命周期与统一建模语言泳道(swimlane)静态模型动态模型软件开发生命周期与统一建模语言对象流(objectFlow)对象流是动作状态或者活动状态与对象之间的依赖关系,表示动作使用对象或者动作对对象的影响。对象流中的对象特点:①一个对象可以由多个动作操纵;②一个动作输出的对象可以作为另一个动作输入的对象;③在活动图中,同一个对象可以多次出现,它的每一次出现表明该对象正处于对象生存期的不同时间点;静态模型动态模型软件开发生命周期与统一建模语言对象流(objectFlow)静态模型动态模型软件开发生命周期与统一建模语言8.2.2活动的分解一个活动可以分为若干个动作或子活动,这些动作和子活动本身可以组成一个活动图;一个包含子活动的活动和嵌套了子状态的组合状态类似,概念上也相对统一。一个不含内嵌活动或动作的活动称之为简单活动;一个嵌套了若干活动或动作的活动称之为组合活动,组合活动有自己的名字和相应的子活动图。静态模型动态模型软件开发生命周期与统一建模语言8.2.3活动图静态模型动态模型软件开发生命周期与统一建模语言8.5活动图建模技术①识别要对其工作流描述的类或对象。②确定工作流的初始状态和终止状态,明确工作流的边界。③对动作状态或活动状态建模。④对动作流建模。⑤对对象流建模。⑥对建立的模型进行精化和细化。静态模型动态模型软件开发生命周期与统一建模语言8.5实例静态模型软件开发生命周期与统一建模语言8.5实例——“餐馆订餐”系统的用例图静态模型动态模型软件开发生命周期与统一建模语言“记录预约”用例的事件路径如下:1.接待员输入要预约的日期2.系统显示该日的预约3.有一张合适的餐桌可以使用,接待员输入顾客的姓名和电话号码、预约的时间、用餐人数和餐桌号3a)没有合适的餐桌可以使用3a1)用例终止4.系统记录并显示该预约4a)输入的预约人数多于餐桌能容纳的人数4a1)系统发出一个警告信息,询问用户是否想要继续预约4a1a)如果回答“否”,用例将不进行预约而终止4a1b)如果回答“是”,预约将被输入,并附有一个警告标志静态模型动态模型软件开发生命周期与统一建模语言建模主事件流静态模型动态模型软件开发生命周期与统一建模语言建模扩展事件流静态模型动态模型软件开发生命周期与统一建模语言划分游泳道后的活动图静态模型动态模型软件开发生命周期与统一建模语言8.6活动图实例1、图书馆系统管理员通过图书管理系统对读者的借阅进行管理(查询、添加、删除和更新借阅信息),请画出系统管理员维护借阅者账户信息的活动图。静态模型动态模型软件开发生命周期与统一建模语言8.6活动图实例静态模型动态模型软件开发生命周期与统一建模语言8.6活动图实例图书管理员的日常工作主要是通过图书管理系统处理借书与还书,借阅者借阅书籍的数量是受限制的,超过还书期限需要缴纳罚金。请给出图书管理员的活动图静态模型动态模型软件开发生命周期与统一建模语言8.6活动图实例静态模型动态模型软件开发生命周期与统一建模语言8.6活动图实例3、借阅者通过自助终端可以查找书籍,查看书籍信息,只有在登陆帐户的情况下才能保存书籍记录,请给出借阅者的活动图。静态模型动态模型软件开发生命周期与统一建模语言8.6活动图实例静态模型动态模型软件开发生命周期与统一建模语言总结协作图和时序图是一对孪生兄弟,它们都能表示对象间的交互过程。但是它们的侧重点不同;时序图清楚地表示了交互作用中的时间顺序,但没有明确