第08章_状态图和活动图(精品).ppt
第第8章章 状态图和活动图状态图和活动图8.1 什么是状态图什么是状态图UML中的状态图中的状态图(Statechart diagram)用于描述一个对用于描述一个对象在其生存周期间的动态行为象在其生存周期间的动态行为,表现一个对象所经历表现一个对象所经历的状态序列的状态序列,引起状态转移的事件引起状态转移的事件(event),以及因状以及因状态转移而伴随的动作态转移而伴随的动作(action).状态图在检查、调试和描述类的动态行为时非常有用状态图在检查、调试和描述类的动态行为时非常有用.2面向对象分析与设计面向对象分析与设计&UML8.1 什么是状态图什么是状态图起始状态起始状态终止状态终止状态状态状态事件事件在状态图中在状态图中,动作可以与状态有关动作可以与状态有关,也可以与转移有关也可以与转移有关.-与状态有关时与状态有关时,对象进行某状态时触发某一动作对象进行某状态时触发某一动作.-与转移有关时与转移有关时,对象在不同状态间转移时对象在不同状态间转移时,触发相应动作触发相应动作.3面向对象分析与设计面向对象分析与设计&UML8.1 什么是状态图什么是状态图l属性拥有较少的可能取值属性拥有较少的可能取值l属性在这些值之间的转移有一定的限制属性在这些值之间的转移有一定的限制状态图描述的对象往往有多个属性状态图描述的对象往往有多个属性,应该在具有如下应该在具有如下特性的属性上建模特性的属性上建模:如如:类类SellableItem中有中有2个属性个属性:salePrice和和status,其中其中:salePrice类型为类型为Money,取值范围为正实数取值范围为正实数;status类型为枚举类型为枚举(Received,InInspection,Accepted,Rejected)则应根据属性则应根据属性status建立状态图建立状态图.4面向对象分析与设计面向对象分析与设计&UML8.2 状态图的基本概念状态图的基本概念l状态状态,statel组合状态组合状态,composite statel子状态子状态,sub statel历史状态历史状态,history statel转移转移,transitionl事件事件,eventl动作动作,action5面向对象分析与设计面向对象分析与设计&UML8.2.1 状态状态状态是在对象的生命期中的某外条件或状况状态是在对象的生命期中的某外条件或状况,在此期在此期间对象将满足某些条件、执行某些活动或等待某些事间对象将满足某些条件、执行某些活动或等待某些事件件.状态的组成部分状态的组成部分:状态名、进入状态名、进入/退出动作、内部转移、退出动作、内部转移、子状态、延迟事件子状态、延迟事件.状态的类型状态的类型:初态、终态、中间状态、组合状态、历初态、终态、中间状态、组合状态、历史状态等史状态等.初态初态终态终态中间状态中间状态6面向对象分析与设计面向对象分析与设计&UML8.2.1 状态状态状态名状态名入口动作入口动作,进入该进入该状态时执行该动作状态时执行该动作.动作动作,处于该状态处于该状态时执行的动作时执行的动作.事件动作事件动作,该状态中出现该状态中出现特定事件时执行的动作特定事件时执行的动作.退出动作退出动作,当离开该状当离开该状态时执行该动作态时执行该动作.延迟响应事件延迟响应事件,在该状态出现该事件时在该状态出现该事件时,不在不在本状态响应本状态响应,而是延迟到其他状态响应而是延迟到其他状态响应.7面向对象分析与设计面向对象分析与设计&UML8.2.2 组合状态和子状态组合状态和子状态嵌套在另一个状态中的状态称为子状态嵌套在另一个状态中的状态称为子状态;包含子状态的状态称为组合状态包含子状态的状态称为组合状态.组合状态组合状态子状态子状态子状态也可以有初态和终态子状态也可以有初态和终态8面向对象分析与设计面向对象分析与设计&UML8.2.2 组合状态和子状态组合状态和子状态子状态之间的子状态之间的 or 关系关系,任意时刻只能到达一个子状任意时刻只能到达一个子状态态.9面向对象分析与设计面向对象分析与设计&UML8.2.2 组合状态和子状态组合状态和子状态子状态之间的子状态之间的 and 关系关系,组组合状态中某时刻可以同时到合状态中某时刻可以同时到达多个子状态达多个子状态.10面向对象分析与设计面向对象分析与设计&UML8.2.3 历史状态历史状态历史状态是伪状态历史状态是伪状态,其目的是记住从组合状态中退出其目的是记住从组合状态中退出时所处的子状态时所处的子状态,当再次进入组合状态时当再次进入组合状态时,可以直接可以直接进入这个子状态进入这个子状态,而不是再从组合状态的初态开始而不是再从组合状态的初态开始.浅浅(shallow)历史状态历史状态,只记住最外层组合状态的历只记住最外层组合状态的历史史.深深(deep)历史状态历史状态,可以记住任意深度的组合状态的历可以记住任意深度的组合状态的历史史.11面向对象分析与设计面向对象分析与设计&UML8.2.3 历史状态历史状态12面向对象分析与设计面向对象分析与设计&UML8.2.4 转移转移转移是两介状态之间的一种关系转移是两介状态之间的一种关系,表示对象将在第一表示对象将在第一个状态执行一定的动作个状态执行一定的动作,并在某个特定事件发生且满并在某个特定事件发生且满足某个特定的警戒条件时进入第二个状态足某个特定的警戒条件时进入第二个状态.转移的格式转移的格式:event-name(parameters)guard-condition/action例如例如:targetAt(p)isThreat/t.addTarget(p)13面向对象分析与设计面向对象分析与设计&UML8.2.4 转移转移对于一个给定的状态对于一个给定的状态,最终只能产生一个转移最终只能产生一个转移,因此因此从一个状态出发的几个转移之间应该是互斥的从一个状态出发的几个转移之间应该是互斥的,包括包括:事件不同事件不同;事件相同但警戒条件互斥事件相同但警戒条件互斥.14面向对象分析与设计面向对象分析与设计&UML8.2.5 事件事件事件是对一个在时间和空间上占有一定位置的有意义事件是对一个在时间和空间上占有一定位置的有意义的事情的详细说明的事情的详细说明.(1)调用事件调用事件,表示对操作的调用表示对操作的调用.问题问题:调用谁的操作调用谁的操作?15面向对象分析与设计面向对象分析与设计&UML8.2.5 事件事件(2)变化事件变化事件,表示某布尔表达式值变化表示某布尔表达式值变化,引起的事引起的事件件.注意注意:变化事件与警戒条件区别变化事件与警戒条件区别16面向对象分析与设计面向对象分析与设计&UML8.2.5 事件事件(3)时间事件时间事件,表示满足某一时间表达式表示满足某一时间表达式,引起的事引起的事件件.(4)信号事件信号事件,表示对象接收到某信号的事件表示对象接收到某信号的事件.信号是对象之间异步发送信号是对象之间异步发送/接收的接收的,它们之间可以形它们之间可以形成泛化关系成泛化关系.信号事件与调用事件类似信号事件与调用事件类似,是异步和同步的区别是异步和同步的区别.17面向对象分析与设计面向对象分析与设计&UML8.2.6 动作动作动作是一个可执行的原子计算动作是一个可执行的原子计算.UML中没有规定动作中没有规定动作的具体语法形式的具体语法形式,采用程序设计的语言语法即可采用程序设计的语言语法即可.两种特殊动作两种特殊动作:进入动作进入动作:entry/action-expression 退出动作退出动作:exit/action-expression18面向对象分析与设计面向对象分析与设计&UML