1、状态图(状态图(StateState Chart/StateChart/State MachineMachine DiagramDiagram)状态图用来表示一个类的全生命周期过程1状态图建模状态图建模 建模元素 状态 事件 状态转移 特殊的状态 初始状态、结束状态 组合状态、嵌套状态 历史状态 状态图的绘制emptyempty1 1 itemitemPush()Pop()new()2状态状态定义:一个对象生命期的一个阶段,该阶段中对象要满足一些特定的 条件、执行特定的活动或等待某个(些)事件的发生 体现为对象属性的取值 包含状态入口或出口行为描述 从不同的抽象层次分析对象,因此其状态是可嵌套
2、(组合)的 在给定的场景下,对象状态是确定的,可满足或不满足某个状态3事件事件定义:可以触发对象状态改变的外部刺激,也就是消息的发出与接收 决定状态迁移何时发生4状态迁移状态迁移定义:是状态之间的关系,当发生一个事件,条件满足时就会发生从 源状态(Source State)到目标状态的转变(Object State)当且仅当迁移条件满足时才能触发状态迁移 每个状态迁移都对应一个触发“事件”同时还需要满足一定的“警戒条件(Guard Condition)”当触发事件发生,或相关警戒条件满足时,进行相应的状态迁移 状态迁移的过程会伴随相关的对象操作5UMLUML状态图中的状态状态图中的状态(Sta
3、te)(State)一个状态表示在某个时间段内 某个陈述是正确的 例如.(budget-expenses)0 某个动作正在执行或者在某个时间等待触发 例如.检查订单商品的存货(checking inventory for order items)例如.等待缺货产品到货(waiting for arrival of a missing items)状态相关的活动类型 do/activity 只要处于这个状态,某个活动就会一直执行,直到离开这个状态 entry/action andexit/action 当进入(/离开)某个状态时执行的动作 include/stateDiagramName 调用另
4、一个状态图,形成嵌套的状态图状态名称状态名称状态活动状态活动初始状态初始状态结束状态结束状态6迁移包括五部分:源状态(source state)、触发事件(event trigger),警戒条件(guard condition),动作(action),目标状态(target state).对于给定的状态,最终只能产生一个迁移,因此从相同的状态出来的、事件相同的几个迁移之间的条件应该是互斥的。UMLUML状态图中的迁移状态图中的迁移(Transitions)(Transitions)源状态目标状态事件名(用逗号分隔的参数表)警戒条件/动作表达式7UMLUML状态图中的事件状态图中的事件(Even
5、t)(Event)事件(Events)的意义在于系统需要了解正在发生什么 状态图中,事件仅需和系统或当前建模的对象相关 从系统角度出发,事件必须建模成一个瞬间可完成的动作 例如.完成工作,考试未通过,系统崩溃 在OOD(面向对象设计)中通过传递消息的方式实现事件 在UML中,有四种类型的事件 变更事件(Change events),当给定条件成立时就会发生变更事件 调用事件(Call events),当给定对象的操作被调用执行时会发生调用事件 时间事件(Elapsed-time events),表明时间段过去,或某个特殊时间点的触发 信号事件(Signal events),当给定对象收到某实时
6、信号8 变更事件变更事件(Change(Change event)event):通过布尔表达式中变量的改变,使得表示 式成立的事件,通过”when”关键字进行提示 例:变更事件和警戒条件(guard condition)的区别:警戒条件只在所相关的事件出现后计算一次,如果值为false,则不进行状态转移。UMLUML状态图中的事件状态图中的事件(Event)(Event)变更变更(Change)(Change)事事件件9 调用事件调用事件(Call(Call event)event):在这一类事件中,状态迁移的动作会调用对象 的方法 语法格式如下:事件事件名名(逗号分隔的参数列表逗号分隔的参数
7、列表 )其中参数列表中的参数格式为:参数名参数名:类型类型例:UMLUML状态图中的事件状态图中的事件(Event)(Event)调用调用(Call)(Call)事事件件10 时间事件时间事件(Time(Time event)event):通过时间表达式是否满足来表示事件,例如一 个绝对时间点的到来,或者经过时间段过去后对象进入一个新状态用关键字after或when表示 例:UMLUML状态图中的事件状态图中的事件(Event)(Event)时间时间(Time)(Time)事事件件11 信号事件信号事件(Signal(Signal event)event):表示接受一 个对象发送的信号(信息)
8、的事件,有可能引发状态迁移(状态改变)语法格式如下:事件事件名名(逗号分隔的参数列表逗号分隔的参数列表 )信号事件与调用事件的区别:信号事件是一个异步事件,调用事件一 般是一个同步事件。UMLUML状态图中的事件状态图中的事件(Event)(Event)信号信号(Signal)(Signal)事事件件12 动作动作是在状态内部或者状态间迁移时执行的原子操作 两种特殊的动作:入口动作(entry action)和出口动作(exit action)Entry动作:进入状态时执行的活动,格式如下:entry/action-expression Exit动作:退出状态时执行的活动,格式如下:exit/
9、action-expression(其中 action-expression 可以引用对象本身的属性和输入事件的参数)UMLUML状态图中的动作状态图中的动作(Action)(Action)13OrderOrderStartStartget nextget next itemitemNot all itemsNot all items checkedcheckedAll items checkedAll items checked&CheckingCheckingallall itemsitems availableavailable Dispatching Dispatching do:do
10、:checkcheck itemitemdo:initiatedo:initiate deliverydeliveryWaitingWaitingItemItem ReceivedReceivedsome items not insome items not in stockstockAll items checked&All items checked&some items not insome items not in stockstockDeliveredDelivered/get first/get first itemitemItemItem ReceivedReceivedall itemsall items availableavailableDeliveredDelivered例:订单处理例:订单处理14