精华内容
下载资源
问答
  • 状态图

    千次阅读 2016-11-13 20:03:39
    何谓状态图1. 状态图的概念 状态图由状态、转换、事件、活动和动作5部分组成: (1)状态指的是对象在其生命周期中的一种状况,处于某个特定状态中的对象必然会满足某些条件、执行某些动作或者是等待某些事件。一个...

    何谓状态图

    1. 状态图的概念
    状态图由状态、转换、事件、活动和动作5部分组成:
      (1)状态指的是对象在其生命周期中的一种状况,处于某个特定状态中的对象必然会满足某些条件、执行某些动作或者是等待某些事件。一个状态的生命周期是一个有限的时间阶段。
      状态由一个带圆角的矩形表示,状态的描述应该包括:名称、入口和出口动作、内部转换和嵌套状态。
    这里写图片描述
      初始状态:每个状态图都应该有一个初始状态,它代表状态图的起始位置。
    一个状态图只能有一个初始状态,用一个实心的圆表示。
      终止状态:终止状态是一个状态图的终点,一个状态图可以拥有一个或者多个终止状态。对象可以保持在终止状态,但是终止状态不可能有任何形式的触发转换,它的目的就是为了激发封装状态上的完成转换。
      判定:实际就是工作流在此处按监护条件的取值发生分支,在UML中判定用空心菱形表示。

      (2)转换指的是两个不同状态之间的一种关系,表明对象将在第一个状态中执行一定的动作,并且在满足某个特定条件下由某个事件触发进入第二个状态。
      转换用带箭头的直线表示,一端连接源状态,箭头指向目标状态。转换还可以标注与此转换相关的选项,如事件、监护条件和动作等,如果转换上没有标注触发转换的事件,则表示此转换自动进行。
    这里写图片描述

       (3)事件指的是发生在时间和空间上的对状态机来讲有意义的那些事情。事件通常会引起状态的变迁,促使状态机从一种状态切换到另一种状态,如信号、对象额度创建和销毁等。
       (4)活动指的是状态机中进行的非原子操作。
       (5)动作指的是状态机中可以执行的那些原子操作,所谓原子操作指的是它们在运行的过程中不能被其他消息所中断,必须一直执行下去,最终导致状态的变更或者返回一个值。
    2. 为什么要使用状态图
    状态图的作用主要体现在以下几个方面:
       (1)状态图清晰的描述了状态之间的转换顺序,通过状态的转换顺序也就可以清晰的看出事件的执行顺序。如果没有状态图我们就不可避免的要使用大量的文字来描述外部事件的合法顺序。
       (2)清晰的事件顺序有利于程序员在开发程序时避免出现事件错序的情况。
       (3)状态图清晰的描述了状态转换时所必须的触发事件、监护条件和动作等影响转换的因素,有利于程序员避免程序中非法事件的进入。
       (4)状态图通过判定可以更好的描述工作流因为不同的条件发生的分支。

    构成状态图的元素

    1. 状态
      状态名:在实际使用中,状态名通常是直观、易懂、能充分表达语义的名词短语,其中每个单词的首字母要大写。
      内部活动:状态可以包含描述为表达式的内部活动。当状态进入时,活动在进入动作完成后就开始。如果活动结束,状态就完成,然后一个从这个状态出发的转换被触发。
      内部转换:状态可能包含一系列的内部转换,内部转换因为只有源状态而没有目标状态,所以内部转换的结果并不改变状态本身。如果对象的事件在对象正处在拥有转换的状态时发生,那内部转换上的动作也被执行。
      入口和出口动作:状态可能具有入口和出口动作。这些动作的目的是封装这个状态,这样就可以不必知道状态的内部状态而在外部使用它。入口动作和出口动作原则上依附于进入和出去的转换,但是将它们声明为特殊的动作可以使状态的定义不依赖状态的转换,因此起到封装的作用。
      历史状态:组成状态可能包含历史状态(History state)。
    2. 转换
      转换用于表示一个状态机的两个状态之间的一种关系,即一个在某初始状态的对象通过执行指定的动作并符合一定的条件下进入第二种状态。
      在这个状态的变化中,转换被称作激发。在激发之前的状态叫做源状态,在激发之后的状态叫做目标状态。简单转换只有一个源状态和一个目标状态。复杂转换有不止一个源状态和(或)有不止一个目标状态。
      外部转换
      外部转换是一种改变状态的转换,也是最普通最常见的一种转换。在UML中,它用从源状态到目标状态的带箭头的线段表示,其他属性以文字串附加在箭头旁。
    这里写图片描述
      内部转换
      内部转换只有源状态,没有目标状态,不会激发入口和出口动作,因此内部转换激发的结果不改变本来的状态。如果一个内部转换带有动作,它也要被执行。内部转换常用于对不改变状态的插入动作建立模型。要注意的是内部转换的激发可能会掩盖使用相同事件的外部转换。
      内部转换的表示法与入口动作和出口动作的表示法很相似。他们的区别主要在于入口和出口动作使用了保留字“entry”和“exit”,其它部分两者的表示法相同。
      完成转换
      完成转换没有明确标明触发器事件的转换是由状态中活动的完成引起的。完成转换也可以带一个监护条件,这个监护条件在状态中的活动完成时被赋值,而不是活动完成后被赋值。
      监护条件
      转换可能具有一个监护条件,监护条件是一个布尔表达式,它是触发转换必须满足的条件。当一个触发器事件被触发时,监护条件被赋值。如果表达式的值为真,转换可以激发;如果表达式的值为假,转换不能激发;如果没有转换适合激发,事件会被忽略,这种情况并非错误。如果转换没有监护条件,监护条件就被认为是真,而且一旦触发器事件发生,转换就激活。
      从一个状态引出的多个转换可以有同样的触发器事件。若此事件发生,所有监护条件都被测试,测试的结果如果有超过一个的值为真,也只有一个转换会激发。如果没有给定优先权,则选择哪个转换来激发是不确定的。
      触发器事件
      触发器事件就是能够引起状态转换的事件。如果此事件有参数,这些参数可以被转换所用,也可以被监护条件和动作的表达式所用。触发器事件可以是信号、调用和时间段等。
      对应与触发器事件,没有明确的触发器事件的转换称作结束转换(或无触发器转换),是在结束时被状态中的任一内部活动隐式触发的。
      动作
      动作(action)通常是一个简短的计算处理过程或一组可执行语句。动作也可以是一个动作序列,即一系列简单的动作。动作可以给另一个对象发送消息、调用一个操作、设置返回值、创建和销毁对象。
      动作是原子性的,所以动作是不可中断的,动作和动作序列的执行不会被同时发生的其他动作影响或终止。动作的执行时间非常短,所以动作的执行过程不能再插入其他事件。如果在动作的执行期间接收到事件,那么这些事件都会被保存,直到动作结束,这时事件一般已经得到值。
    3. 判定
      判定用来表示一个事件依据不同的监护条件有不同的影响。在实际建模的过程中,如果遇到需要使用判定的情况,通常用监护条件来覆盖每种可能,使得一个事件的发生能保证触发一个转换。
      判定在活动图和状态图中都有很重要的作用。转换路径因为判定而分为多个分支,可以将一个分支的输出部分与另外一个分支的输入部分连接而组成一棵树,树的每个路径代表一个不同的转换。树为建模提供了很大的方便。
      在活动图中,判定可以覆盖所有的可能,保证一些转换被激发。否则,活动图就会因为输出转换不再重新激发而被冻结。
    4. 同步
      同步条是为了说明并发工作流的分支与汇合。状态图和活动图中都可能用到同步。在UML中,同步用一条线段来表示。
    这里写图片描述
    5. 事件
      在状态机中,一个事件的出现可以触发状态的改变。它发生在时间和空间上的一点,没有持续时间。如接受到从一个对象到另一个对象的调用或信号、某些值的改变或一个时间段的终结。
      事件可以分成明确或隐含的几种,主要包括:信号事件、调用事件、改变事件和时间事件等。

    状态图的组成

    1. 顺序组成状态
      如果一个组成状态的多个子状态之间是互斥的,不能同时存在的,这种组成状态称为顺序组成状态。
      一个顺序组成状态最多可以有一个初始状态和一个终态,同时也最多可以由一个浅(shallow)历史状态和一个深(deep)历史状态。
    这里写图片描述
    2. 并发组成状态
      在一个组成状态中,可能有两个或者多个并发的子状态机,我们称这样的组成状态为并发组成状态。每个并发子状态还可以进一步分解为顺序组成状态。
      一个并发组成状态可能没有初始状态,终态,或者历史状态。但是嵌套在它们里的任何顺序组成状态可包含这些伪状态。
    这里写图片描述

    使用Rose创建状态图

    1. 创建状态图
      在Rational Rose中,可以为每个类创建一个或者多个状态图类的转换和状态都可以在状态图中体现。首先,展开“Logic View”菜单项,然后在“Logic View”图标上单击鼠标右键,在弹出的菜单中选择“New”下的“Statechart Diagram”选项建立新的状态图。
    这里写图片描述

    2. 创建初始和终止状态
      初始状态和终止状态是状态图中的两个特殊状态。初始状态代表着状态图的起点,终止状态代表着状态图的终点。对象不可能保持在初始状态,但是可以保持在终止状态。
      初始状态在状态图中用实心圆表示,终止状态在状态图中用含有实心圆的空心圆表示。鼠标左键点击状态图工具栏中的“”图标,然后在绘制区域要绘制的地方单击鼠标左键就可以创建初始状态。终止状态的创建方法和初始状态相同。
    3. 创建状态间的转换
      转换是两个状态之间的一种关系,代表了一种状态到另一种状态的过度,在UML中转换用一条带箭头的直线表示。
      要增加转换,首先用鼠标左键单击状态工具栏中的图标,然后再用鼠标左键单击转换的源状态,接着向目标状态拖动一条直线。
    4. 创建监护条件
      监护条件是一个布尔表达式,它控制转换是否能够发生。
      要添加监护条件,先双击转换的图标,选择出现的对话框中的“Detail”选项卡的“Guard Condition”选项,然后填入监护条件。可以参考添加动作的方法添加监护条件。
    这里写图片描述

    创建项目中的状态图

    1. 确定状态图的实体
      要创建状态图,首先要标识出哪些实体需要使用状态图进一步建模。虽然我们可以为每一个类、操作、包或用例创建状态图,但是这样做势必浪费很多的精力。一般来说,不需要给所有的类都创建状态图,只有具有重要动态行为的类才需要。
      从另一个角度看,状态图应该用于复杂的实体,而不必用于具有复杂行为的实体。使用活动图可能会更加适合那些有复杂行为的实体。具有清晰、有序的状态实体最适合使用状态图进一步建模。
      对于学生选课来说,需要建模的实体就是学生账号。

    2. 确定状态图中实体的状态
    对于一个学生账号来说,它的状态主要包括:
      初始状态
      终止状态
      可选课状态
      不可选课状态
      账号被删除状态
    这里写图片描述
    3. 创建相关事件完成状态图
      当确定了需要建模的实体,并找出了实体的初始状态和终止状态以及其他相关状态后,就可以着手创建状态图。
      首先,我们要找出相关的事件和转换。对于学生账号来说,当有新的同学入学时,将会给新同学创建一个新的账号,下面新同学可以用这个账号去选课。一般来说,每个人的选课数目是有限的,比如说选择6门课程后将不能再选课。如果已选了6门课程还要再选课,就必须删除已选的课程。直到这位同学毕业,将其账号删除,则进入终止状态。
    这里写图片描述

    展开全文
  • UML活动图、状态图

    万次阅读 多人点赞 2018-10-13 13:55:27
    本文主要介绍状态图和活动图。 一.状态图  状态(state)是指在对象的生命期中的某个条件或状况,在此期间对象将满足某些条件、执行某些活动或等待某些事件。所有对象都具有状态,状态是对象执行了一系列活动的...

     本文主要介绍状态图和活动图。

    一.状态图


          状态(state)是指在对象的生命期中的某个条件或状况,在此期间对象将满足某些条件、执行某些活动或等待某些事件。所有对象都具有状态,状态是对象执行了一系列活动的结果,当某个事件发生后,对象的状态发生变化。

         状态图(statechart diagram): 
         用来描述一个特定的对象所有可能的状态,以及由于各种事件的发生而引起的状态之间的转移和变化。
    并不是所有的类都需要画状态图,有明确意义的状态,在不同状态下行为有所不同的类才需要画状态图。如下,
    一个机器的状态图

    image

     

    再如,CD Player的状态图

    image

    1.状态
    一个状态有以下几个部分:状态名(name)、进入/退出动作(entry/exit action)、内部转移(internal transttion)、子状态(substate)、延迟事件(dferred event)。
    状态可以细分为不同的类型,例如初态、终态、中间状态、组合状态、历史状态等。一个状态图只能有一个初态,但终态可以有一个或多个,也可以没有终态。
    中间状态包括两个区域:名字域和内部转移域,如图所示。其中内部转移域是可选的。

    image

    横线上面是名字域,下面是转换域(可选)。

    ntry/turnOn:当转入该状态时,做开灯动作。
    do/blinkFivetimes:当处于该状态时,灯闪烁5次。do活动是只在状态内出现的活动,不能附加到转换上。
    event poweroff/powerSupplySelf:当电源关闭事件发生时,用自备电源。
    exit/turnOff:当转出该状态时,做关灯动作。
    event selfTest/defer:当selfTest事件发生时,对象将延迟响应,到别的状态中再处理,用defer这个特定动作表示延迟。

    2.状态图的要素


    椭圆或圆角矩形:表示对象的一种状态,椭圆内部填写状态名
    箭头:表示从箭头出发的状态可以转换到箭头指向的状态
    事件:引起状态转换的原因。事件名可在箭头线上方标出
    条件:事件名后加方括号,括号内写状态转换条件
    实心圆:初始状态
    内部实心的同心圆:最终状态

    3.状态的类型

    ①按状态过程分:

    image

    ②含有子状态的状态被称为组合或嵌套状态

    image

    组合状态可以使用“与”关系分解为并发子状态,或者通过“或”关系分解为互相排斥的顺序子状态。两种表示方法:
    顺序子状态
    如果一个组成状态的子状态对应的对象在其生命期内的任何时刻都只能处于一个子状态,即多个子状态之间是互斥的,不能同时存在,这种子状态称为顺序子状态。

    image
    并发子状态
    有时组合状态有两个或者多个并发的子状态机,此时称组成状态的子状态为并发子状态。

    image

    历史状态是伪状态, 其目的是记住从组合状态中退出时所处的子状态, 当再次进入组合状态时, 可以直接进入这个子状态, 而不是再从组合状态的初态开始。

    image浅(shallow)历史状态, 只记住最外层组合状态的历史。


    image深(deep)历史状态, 可以记住任意深度的组合状态的历史。

    CD Player,running状态被打断到power on状态,再转回到running状态时,希望直接进入历史状态

    image

    4.转移(Transition)
    转移是两个状态间的一种关系,表示对象将在当前状态中执行动作,并在某个特定事件发生或某个特定的条件满足时进入后继状态。 每个转移只允许有一个事件触发,一个事件只允许有一个动作。

    ①转移的五要素(注意格式)

    格式:事件(参数)[条件]/动作
    ▪源状态
    ▪目标状态
    ▪触发事件
          -如果箭头上不带任何事件名,表示是一个自动转换,当与源状态相关的活动完成时就会自动触发。
    ▪监护条件
    ▪动作

    image

    ②转换的类型

    内部转移:不导致状态改变的转移,不会执行entry和exit动作

    image
    外部转移
    自转移

    image

    5.事件(Event)
    事件是对一个时间和空间上占有一定位置的有意义的事情的规格说明。事件触发状态的转移。


    四类主要事件:
    ▪信号事件
    ▪调用事件
    ▪变化事件
    ▪时间事件

    ①信号signer事件
    对象之间通过发送信号和接收信号实现通信。信号是一种异步机制。在计算机中,鼠标和键盘的操作均属于此类事件。对于一个信号而言,对象一般都有相应的事件处理器,如onMouseClick()等。

    ②调用call事件
    表示一个操作的调度。一个对象请求调用另一个对象的操作
    信号是一个异步事件,而调用事件一般是同步的。也就是说,当对象调用另一对象的操作时,控制就从发送者传送到接收者,该事件触发转换,完成操作后,接收者转换到一个新的状态,控制返还给发送者。

    image

    ③变化change事件
    用关键字When,后面跟布尔表达式
    When(temperature>120)/alerm()
    变化事件的意图是要频繁测试表达式,只要表达式由假变为真,事件就会发生。

    image

    注意: 变化事件与监护条件的区别

    ④时间(time)事件
    时间事件是指在绝对时间或在某个时间间隔内发生的事情所引起的事件。
    例如到达某一时间或经过了某一时间段。用关键字When 或After表示。

    image

    6.状态图建模技术

    建模步骤:
    ①找出适合用模型描述其行为的类。
    ②确定对象可能存在的状态。
    ③确定引起状态转换的事件。
    ④确定转换进行时对象执行的相应动作。
    ⑤对建模的结果进行相应的精化和细化。

    二.活动图

    1. 活动图的概念
           活动图(activity diagram)是UML的动态视图之一,用来描述事物或对象的活动变化流程。活动图可看作状态图的特殊形式。特殊性在于活动图中的一个活动结束后将立即进入下一个活动而不需要事件触发活动的转移。

          活动图用于描述系统的工作流程和并发行为。活动图被设计用于简化描述一个过程或操作的工作步骤。例如,可以用活动图对一个软件的开发过程建模;还可以对诸如求Fibnacci数列第n个数的数值之类的操作进行建模。

    活动图示例:

    image

    2.活动图的组成元素:


    ▪活动(Activity)
    ▪动作流(Action Flow)
    ▪分支(Branch)与合并(Merge)
    ▪分叉(Fork)和汇合(Join)
    ▪泳道(Swimlane)
    ▪对象流(Object Flow)

    3.活动

    活动(activity)表示的是某流程中的任务的执行,它可以表示某算法过程中语句的执行。活动在活动图中表现为一个由一系列动作组成的非原子的执行过程。


    动作状态(Action State)
    活动状态(Activity State)

    ①动作状态

    动作状态是指执行原子的、不可中断的动作,并在此动作完成后通过完成转换转向另一个状态的状态。 
    动作状态使用平滑的圆角矩形表示,动作状态所表示的动作写在圆角矩形内部。

    image

    ②活动状态

    活动状态是可分解的,不是原子的,其工作的完成需要一定的时间。
    可把动作状态看作活动状态的特例。 
    活动状态的表示图标也是平滑的圆角矩形,并可以在图标中给出入口动作和出口动作等信息。

    image

    4.动作流

    所有动作状态之间的转换流称之为动作流。 
    活动图的转换不需要特定事件的激发,一个动作状态执行完后自动转换到另外一个状态。
    活动图的转换用带箭头的直线表示。
    可用条件限制转换。

    image

    5.分支与合并

    分支一般用于表示对象类所具有的条件行为。
    条件行为用分支和合并表达。 
    一个分支有一个入转换和两个带条件的出转换,出转换的条件应当是互斥的。
    一个合并有两个带条件的入转换和一个出转换,合并表示从对应的分支开始的条件行为的结束。

    image

    6.分叉与汇合

    分叉用于将动作流分为两个或者多个并发运行的分支,而汇合则用于同步这些并发分支,以达到共同完成一项事务的目的。
    分叉可以用来描述并发线程。
    汇合代表两个或多个并发控制流同步发生,当所有的控制流都达到汇合点后,控制才能继续往下进行。

    image

    7.泳道

    泳道将活动图中的活动化分为若干组,并把每一组指定给负责这组活动的业务组织,通常为对象。
    泳道区分了负责活动的对象,明确地表示了哪些活动是由哪些对象进行的。
    每个活动只能明确地属于一个泳道。
    泳道用垂直实线绘出,垂直线分隔的区域就是泳道。在泳道上方可以给出泳道的名字或对象(对象类)的名字,该对象(对象类)负责泳道内的全部活动。
    泳道没有顺序,不同泳道中的活动既可以顺序进行也可以并发进行,动作流和对象流允许穿越分隔线。

    image

    8.活动的分解

    一个活动可以分为若干个动作或子活动,这些动作和子活动本身可以组成一个活动图。
    一个不含内嵌活动或动作的活动称之为简单活动;一个嵌套了若干活动或动作的活动称之
    为组合活动,组合活动有自己的名字和相应的子活动图。

    image

    一个包含子活动的活动和嵌套了子状态的组合状态类似,概念上也相对统一。

    image

    9.活动图的用途

    ▪对系统工作流程建模
      工作流:是一个良好定义的动作序列,执行时将产生一个可观察的值,或者产生一个个体或实体的对象。 
    ▪对工程组织过程建模
    ▪对算法流程建模

    ①对系统工作流的建模

    image
    ②对工程组织过程建模

    image
    ③对算法流程建模

    image

    10.活动图建模技术


    ①识别要对其工作流描述的类或对象。
    ②确定工作流的初始状态和终止状态,明确工作流的边界。
    ③对动作状态或活动状态建模。
    ④对动作流建模。
    ⑤对对象流建模。
    ⑥对建立的模型进行精化和细化

    三.活动图与状态图的比较

    1.活动图与状态图的相同点
       都是对系统的动态行为建模。

    2.活动图与状态图的区别:
    ①描述对象不同


           状态图:描述对象状态及状态之间的转移;
           活动图:描述从活动到活动的控制流。


    ②使用场合不同


           状态图:描述对象在其生命期中的行为状态变化;
           活动图:描述过程的流程变化。

     

    展开全文
  • UML 状态图

    千次阅读 热门讨论 2018-07-31 10:23:59
    定义:状态机是展示状态状态转换的。在计算机科学中,状态机的使用非常普遍:在编译技术中通常用有限状态机描述词法分析过程;在操作系统的进程调度中,通常用状态机描述进程的各个状态之间的转化关系。此外,在...

    在系统分析员对某对象建模时,最自然的方法并不是着眼于从活动到活动的控制流,而是着眼于从状态到状态的控制流。

    状态机

    定义: 状态机是展示状态与状态转换的图。在计算机科学中,状态机的使用非常普遍:在编译技术中通常用有限状态机描述词法分析过程;在操作系统的进程调度中,通常用状态机描述进程的各个状态之间的转化关系。此外,在面向对象分析与设计中,对象的状态、状态的转换、触发状态转换的事件、对象对事件的响应(即事件的行为)都可以用状态机来描述。

    组成: 由状态、转换、时间、活动、和动作 5 部分组成。

    1. 状态:表示一个模型在其生存期内的状况,一个状态的生存期是一个有限的时间段。如满足某些条件或等待某些事件。
    2. 转换表示两个不同状态之间的联系,事件可以触发状态之间的转换。
    3. 事件是在某个时间产生的,可以触发状态转换的部分,如信号、对象的创建和销毁、超时和条件的改变等。
    4. 活动是在状态机中进行的一个非原子的执行,由一系列动作组成。
    5. 动作是一个可执行的原子计算,它导致状态的变更或者返回一个值。

    状态图

    一个状态图表示一个状态机,主要用于表现从一个状态到另一个状态的控制流。它不仅可以展现一个对象拥有的状态,还可以说明事件(如消息的接收、错误、条件变更等)如何随着时间的推移来影响这些状态。

    一个简单状态图:
    这里写图片描述

    状态机通常包括以下内容:

    1.状态
    定义对象在其生命周期中的条件或状况。对象满足某些条件,执行某些对应的操作或等待某些事件。

    状态是状态机的重要组成部分,它描述了状态机所在对象动态行为的执行所产生的结果。这里的结果一般是指能影响此对象对后续事件响应的结果。状态用于对对象在其生命中的状况建模,在这些状况下状态可以满足某些条件、执行某些操作或等待某些事件。

    完整的状态由 5 个组成部分:

    • 名字(name)

      由一个字符串构成,用以识别不同的状态。状态可以没有名字。状态名一般放置在状态图符的顶部。

    • 入口/出口动作(entry/exit action)

      入口/出口动作表示进入/退出这个状态所执行的动作。入口动作的语法是 entry/ 执行的动作;出口动作的语法是 exit/ 执行的动作。这里所指的动作可以是原子动作,也可以是动作序列(action sequence)。

    • 内部转换(Internal Transition)

      内部转换是不会引起状态变化的转换,此转换的触发不会导致状态的入口/出口动作被执行。定义内部转换的原因是有时候入口/出口动作显得是多余的。

      出口动作显得多余,这时就可以使用内部转换,而不触发入口/出口动作的执行。

      在图形表示上,由于内部转换不引起状态的转变,因此它的文字标识被附加在表示状态的圆角矩形内部,而不使用箭头进行图形标识。

    • 延迟事件(Deferred Event)

      延迟事件该状态下暂不处理,但将推迟到该对象的另一个状态下事件处理队列。也就是所延迟事件是事件的一个列表,此列表内的事件当前状态下不会处理,在系统进入其他状态时再处理。

    • 子状态 (Substate)

      在复杂的应用中,当状态机处于某特定的状态时,状态机所在的对象在此刻的行为还可以用一个状态机来描述,也就是说,一个状态内部还包括其他状态。在 UML 里,子状态被定义成状态的嵌套结构,即包含在某状态内部的状态。

      在UML里,包含子状态的状态被称为复合状态(Composite State),不包含子状态的状态被称为简单状态(Simple State)。子状态以两种形式出现:顺序子状态和并发子状态。

    2.转换
    转换包括事件和动作。事件是发生在时间空间省的一点值得注意的事情。动作是原子性的,通常表示为一个简短的计算处理过程。

    转换是状态间的关联。它们用于对一个实体的不同状态间的关系建模。当某实体在第一个状态中执行一定的动作,并在某个特定事情发生并且某个特定的条件满足时进入下一个状态。

    在 UML 里,转换由5个部分组成,它们分别是:源状态、目标状态、触发事件、监护条件和动作。

    • 源状态(Source State)

      转换描述的是状态机所在的对象的状态的变化(状态图是可视化状态机的一种方式)。转换使对象从某个状态转换到另一个状态。那么在转换被激发之前,对象所处的状态就是转换的源状态。源状态就是被转换影响的状态。某对象处于源状态,当它接收到触发事件或满足监护条件,就会激活一个转换。

    • 目标状态(Target State)

      转换使对象从一个状态转换到另一个状态。转换完成后,对象状态发生了变化,这时对象所处的状态就是转换的目标状态。目标是转换完成后活动的状态。在图形上,转换的源状态位于表示转换的箭头的起始位置。转换的目标状态位于表示转换的箭头所指的那个状态。

    • 触发事件(Trigger Event)

      状态机描述了对象的具有事件驱动的动态行为。在这些动态行为中,对象动作的执行、状态的改变都是以特定事件的发生为前提的。转换的触发事件就是引起转变的事件。这里所指的事件可以是信号、调用、时间段或状态的一个改变。

    • 监护条件(Guard Condition)

      转换可能具有一个监护条件。监护条件是一个方括号括起来的布尔表达式,它被放在触发事件的后面。监护条件可以引用对象的属性值和触发事件的参数。当一个触发事件被触发时,布尔表达式被赋值。如果值是“真”,则触发事件使转换有效。如果值是“假”,则不会引起转换。
      监护条件只在引起转换的触发事件发生时被赋值一次,如果此转换被重新触发,监护条件会被重新赋值。

    • 动作(Action)

      当转变被激活时,它对应的动作被执行。动作是一个可执行的原子计算,它可以包括操作调用、另一个对象的创建或撤销、向一个对象发送信号。动作也可以是一个动作序列,即包括一序列的简单动作。动作或动作序列的执行不会被同时发生的其他动作所影响。动作的执行时间是非常短的,与外界的时间相比几乎可以忽略,因此在动作执行过程中不允许被中断,这点正好与活动相反,活动是可以被其他事件中断的。在某动作执行时,一般新进的事件会被安排在一个等待队列里。

    状态图用途

    状态图用于对系统的动态方面建模,动态方面指出现在系统体系结构中任一对象按事件排序的行为,其中这些对象可以是类、接口、构件和节点。当使用状态图对系统建模时,可以在类、用例、子系统或整个系统的语境中使用状态图。

    它能帮助系统开发人员理解系统中对象的行为。而类图和对象图只能展现系统的静态层次和关联,并不能表达系统的行为。一幅结构清晰的状态图详细描述了对象行为,这大大地帮助了开发人员构造出符合用户需求的系统。

    状态图建模步骤

    (1)识别一个要对其生命周期进行描述的参与行为的类;
    (2)对状态建模,即确定对象可能存在的状态;
    (3)对事件建模,即确定对象可能存在的事件;
    (4)对动作建模,即确定当转变被激活时,相应被执行的动作;
    (5)对建模结果进行精化和细化。

    展开全文
  • UML--状态图的基本概念和作用

    万次阅读 多人点赞 2019-10-27 19:36:49
    状态图的含义 1)状态机 状态机是一种记录下给定时刻状态的设备,它可以根据各种不同的输入对每个给定的变化改变其状态或引发一个动作。比如:计算机操作系统中的进程调度和缓冲区调度都是一个状态机。 在UML中,...

    状态图的含义

    1)状态机
    状态机是一种记录下给定时刻状态的设备,它可以根据各种不同的输入对每个给定的变化改变其状态或引发一个动作。比如:计算机操作系统中的进程调度和缓冲区调度都是一个状态机。

    在UML中,状态机由对象的各个状态和连接这些状态的转换组成, 是展示状态与状态转换的图。

    在面向对象的软件系统中,一个对象无论多么简单或者多么复杂,都必然会经历一个从开始创建到最终消亡的完整过程,这个过程通常被称为对象的生命周期。一般来说,对象在其生命周期内是不可能完全孤立的,它必然会接受消息来改变自身,或者发送消息来影响其他对象。而状态机就是用于说明对象在其生命周期中响应时间所经历的状态序列以及其对这些事件的响应。在状态机的语境中,一个事件就是一次激发的产生,每个激发都可以触发一个状态转换。

    状态机由状态、转换、事件、活动和动作五部分组成。

    • 状态:
      状态指的是对象在其生命周期中的一种状况,处于某个特定状态中的对象必然会满足某些条件、执行某些动作或者是等待某些事件。一个状态的生命周期是一个有限的时间阶段。

    • 转换:
      转换指的是两个不同状态之间的一种关系,表明对象在第一个状态中执行一定的动作,并且在满足某个特定条件下由某个事件触发进入第二个状态。

    • 事件:
      事件指的是发生在时间和空间上的对状态机来讲有意义的那些事情。事件通常会引起状态的变迁,促使状态机从一种状态切换到另一种状态,如信号、对象额度创建和销毁等。

    • 活动:
      活动指的是状态机中进行的非原子操作。

    • 动作:
      动作指的是状态机中可以执行的哪些原子操作。所谓原子操作,指的是他们在运行的过程中不能被其他消息中断,必须一直执行下去,以至最终导致状态的变更或者返回一个值。

    状态图

    一个状态图(Statechart Diagram)本质上就是一个状态机,或者是状态机的特殊情况,它基本上是一个状态机中元素的一个投影,这也就意味着状态图包括状态机的所有特征。

    状态图描述了一个实体基于事件反映的动态行为,显示了该实体是如何根据当前所处的状态对不同的事件作出反应的。

    在UML中,状态图由表示状态的节点和表示状态之间转换的带箭头的直线组成。状态的转换由事件触发,状态和状态之间由转换箭头连接。每一个状态图都有一个初始状态(实心圆),用来表示状态机的开始。还有一个中止状态(半实心圆),用来表示状态机的终止。状态图主要由元素状态、转换、初始状态、中止状态和判定等组成,一个简单的状态图如下:

    在这里插入图片描述

    1)状态:
    状态用于对实体在其生命周期中的各种状况进行建模,一个实体总是在有限的一段时间内保持一个状态。状态由一个带圆角的矩形表示,状态的描绘素应该包括名称、入口和出口动作、内部转换和嵌套状态。如下图,为一个简单状态:
    在这里插入图片描述

    • 状态名
      指的是状态的名字,通常用字符串表示,其中每个单词的首字母大写。状态名可以包含任意数量的字母、数字和除了冒号“:”以外的一些字符,可以较长,甚至连续几行。但是一定要注意一个状态的名称在状态图所在的上下文中应该是唯一的,能够把该状态和其他状态区分开。

    • 入口和出口动作
      一个状态可以具有或者没有入口和出口动作。入口和出口动作分别指的是进入和退出一个状态时所执行的“边界”动作。

    • 内部转换
      指的是不导致状态改变的转换。内部转换中可以包含进入或者退出该状态应该执行的活动或动作。

    • 嵌套状态
      状态分为简单状态(Simple State)和组成状态(Composite State)。简单状态是指在语义上不可分解的、对象保持一定属性值的状况,简单状态不包含其他状态:而组成状态是指内部嵌套有子状态的状态,在组成状态的嵌套状态图部分包含的就是此状态的子状态。

    2)转换:
    在UML的状态建模机制中,转换用带箭头的直线表示,一端连接源状态,箭头指向目标状态。转换还可以标注与此转换相关的选项,如事件、监护条件和动作等,如下图所示。注意:如果转换上没有标注触发转换的事件,则表示此转换自动进行。

    在这里插入图片描述

    在状态转换机制中需要注意的五个概念如下:

    • 状态源(Source State):指的是激活转换之间对象处于的状态。如果一个一个状态处于源状态,当它接收到转换的触发事件或满足监护条件时,就激活了一个离开的转换。
    • 目标状态(Event State):指的是转换完成后对象所处的状态。
    • 事件触发器(Event Trigger):指的是引起源状态转换的事件。事件不是持续发生的,它只发生在时间的一点上,对象接收到事件,导致源状态发生变化,激活转换并使监护条件得到满足。
    • 监护条件(Guard Condition):是一个布尔表达式。当接收到触发事件要触发转换时,要对该表达式求值。如果表达式为真,则激活转换:如果表达式为假,则不激活转换,所接收到的触发事件丢失。
    • 动作(Action):是一个可执行的原子计算。

    3)初始状态:
    每个状态图都应该有一个初始状态,它代表状态图的起始位置。初始状态是一个伪状态(一个和普通状态有连接的假状态),对象不可能保持在初始状态,必须要有一个输出的无触发转换(没有事件触发器的转换)。通常初始状态上的转换是无监护条件的,并且初始状态只能作为转换的源,而不能作为转换的目标。在UML中,一个状态图只能有一个初始状态,用一个实心圆表示。

    4)终止状态:
    终止状态是一个状态图的终点,一个状态图可以拥有一个或者多个终止状态。对象可以保持在终止状态,但是终止状态不可能有任何形式的和触发转换,它的目的就是为了激发封装状态上的转换过程的结束。因此,终止状态只能作为转换的目标而不能作为转换的源,在UML中,终止状态用一个含有实心圆的空心圆表示。

    5)判定:
    活动图和状态图中都有需要根据给定条件进行判断,然后根据不同的判断结果进行不同转换的情况。实际就是工作流在此处按监护条件的取值发生分支,在UML中,判定用空心菱形表示。

    状态图的作用

    状态图的作用主要体现在以下几个方面。

    • 状态图清晰地描述了状态之间的转换顺序,通过状态的转换顺序也就可以清晰地看出事件的执行顺序。如果没有状态图我们就不可避免地要使用大量文字来描述外部事件的合法顺序。
    • 清晰的事件顺序有利于程序员在开发程序时避免出现事件顺序错误的情况。例如,对于一个网上销售系统,在用户处于登录状态前是不允许购买商品的,这就需要程序员开发程序的过程中加以限制。
    • 状态图清晰地描述了状态转换时所必需的触发事件、监护条件和动作等影响转换的因素,有利于程序员避免程序中非法事件的进入。例如,飞机起飞前半小时不允许售票,在状态图中就可以清晰地看到,可以提醒程序员不要遗漏这些限制条件。
    • 状态图通过判定可以更好地描述工作流因为不同的条件发生的分支。例如,当一个班的人数少于10人的时候需要和其他班合为一班上课,大于10人则单独上课,在状态图中就可以很明确地表达出来。

    总之一个简洁完整的状态图可以帮助一个设计者不遗漏任何事情,最大程度地避免程序中错误的发生。

    展开全文
  • 数据流程图 状态图 流程图

    万次阅读 多人点赞 2018-04-23 14:43:38
    数据流程图 状态图 流程图 数据流程图 数据流程图(DFD)提供了通过系统的数据流的图形表示。它逻辑上显示了我们的系统进程和外部接口或数据存储交换了哪些信息,但是它没有明确显示信息交换的时间或顺序。 ...
  • 状态图详解

    千次阅读 2020-01-18 11:38:05
    状态图 一、状态图概要 ​ ★说明对象在它的生命期中响应事件所经历的状态序列,以及它们对那些事件 的响应。 ​ ★状态图用于揭示Actor、类、子系统和组件的复杂特性。为实时系统建模。 二、状态图的组成 ...
  • UML——状态图

    千次阅读 2020-06-24 15:49:05
    什么是状态图 状态图是系统分析的一种常用工具,它通过建立类对象的生存周期模型来描述对象随时间变化的动态行为。 一个状态图表示一个状态机,主要用于表现从一个状态到另一个状态的控制流。它不仅可以展现一个...
  • 菜鸟实战UML——状态图

    万次阅读 多人点赞 2018-10-03 09:21:51
    状态图 状态图(Statechart Diagram):是描述一个实体基于事件反应的动态行为,显示了该实体如何根据当前所处的状态对不同的事件做出反应。通常我们创建一个UML状态图是为了以下的研究目的:研究类、角色、子系统、...
  • 软件工程 第六章:状态图

    万次阅读 2019-01-19 21:08:43
    第六章:状态图 概述 状态图定义:状态图描述了一个对象或交互过程在它的生命周期中对**一系列外界激励的所呈现出的不同状态以及它相应的响应和活动。**状态图描述了一个状态机。 状态机定义:根据当前事件,以及对...
  • 状态图:对象的所有状态,以及基于事件发生的状态改变的过程; 活动图:用例的工作流程; 部署图:系统的软硬件物理体系结构; 状态图 基本语法 元素 语法 说明 开始和结束状态 [*] 标识开始和结束状态 ...
  • 好歹还上过一学期的UML课 整理一下笔记吧 UML:统一建模语言(Unified Modeling Language) UML是非专利的第三代建模和规约语言 是用于说明 可视化 构建和编写一个正在开发的 ...模型的分类: 1、用例 从用户的角...
  • UML图详解(八)状态机(状态图和活动图)

    万次阅读 热门讨论 2016-06-15 13:56:52
    状态图和活动图是状态机的两种表现形式。利用状态机可以精确地描述对象的行为。 从对象的初始状态起,开始响应事件并执行某些动作,这些事件引起状态的转换;对象在新状态下又开始响应事件和执行动作,如此连续进行...
  • [UML建模]状态图(Statechart Diagram)

    千次阅读 2020-02-09 13:42:50
    1、什么是状态图? UML 状态图是图表本身的名称,主要用于描述对象具有的各种状态、状态之间的转换过程以及触发状态转换的各种事件和条件。 2、状态机的目的 为了模拟系统的动态环节。 反应系统模型生命周期。 一个...
  • 前言:在做软件工程时经常会需要用到绘图来帮助理解软件构造,CSDN的编辑器集成了插入绘图工具mermaid,以下是对其常用...  状态图的定义有很多,为了便于记忆,个人挑选了最常用的一种写法: ```mermaid stateDiagr
  • UML之状态图

    千次阅读 2018-11-12 17:05:42
    UML之状态图
  • UML状态图示例

    千次阅读 2019-11-26 17:20:27
    状态图是用于表示对象状态的UML图。 在图书管理系统中,图书有不同的状态,我们可以用状态图表示如下:
  • 学会使用Rose绘制状态图

    千次阅读 2019-11-22 09:07:50
    (1)理解什么是状态和状态图。 (2)学会使用Rose绘制状态图。 二、实验要求 (1)2学时; (2)每组2人; (3)设计性实验; 三、实验主要设备 台式或笔记本电脑 四、实验内容 1.根据《操作系统》课程中...
  • 状态图和活动图的区别

    万次阅读 热门讨论 2018-09-16 20:11:52
    一,活动 活动(activity diagram,动态)是阐明了业务用例实现的工作流程。业务工作流程说明了业务为向所服务的业务主角提供其所需的价值而必须完成的工作。业务用例由一系列活动组成,它们共同为业务主角生成...
  • 状态图的内容说明完了以后,本文说明EA中各种的画法。 创建状态图 打开【Project Brower】中根节点的上下文菜单,选择【Add】-【Add View...】项目。 输入名称...
  • FSM有限状态机-状态图画法

    千次阅读 2019-09-19 11:49:31
    fsm包含三个组件:状态(必须有)、动作(非必须)、事件(非必须) 状态:体现当前状态机处在状态,比如,开状态,关状态等,同时状态有一个访问次数/visit的值,这个决定它需要触发多次才能发生状态转移,这里这个...
  • 软件工程 复印机的状态图

    千次阅读 2020-02-25 16:04:53
    复印机的工作过程大致如下:未接到复印命令时处于闲置状态,一旦接到复印命令则进入复印状态,完成一个复印命令规定的工作后又回到闲置状态,等待下一个复印命令;如果执行复印命令时发现没纸,则进入缺...状态图: ...
  • 设备运行状态图需求:翻阅echarts 官网实例, 发现其中的 profile 图就是想要的效果:http://echarts.baidu.com/examples/editor.html?c=custom-profilevar data = []; var dataCount = 100;// 测试数据条数 var ...
  • EA&UML日拱一卒-状态图::状态机

    千次阅读 2017-10-24 20:05:57
    本文介绍状态机和上下文类目的定义方法。
  • UML中时序图/用例图/状态图/协作图间的区别时序图时序图用于描述对象之间的传递消息的时间顺序, 即用例中的行为顺序.当执行一个用例时, 时序图中的每条消息对应了一个类操作或者引起转换的触发事件. 在 UML 中, ...
  • StarUML~状态图效果

    千次阅读 2019-06-01 22:26:51
    01 示例 播放器 02 图书馆 借书状态
  • PowerDesigner16 状态图

    万次阅读 多人点赞 2017-10-21 20:25:01
    状态图(Statechart Diagram)主要用于描述一个对象在其生存期间的动态行为,表现为一个对象所经历的状态序列,引起状态转移的事件(Event),以及因状态转移而伴随的动作(Action)。一般可以用状态机对一个对象的...
  • 软件工程(软件工程中的各种一般用于以下三个阶段): 需求分析阶段:  用例:用例是指由参与者(Actor)、用例(Use Case),边界以及它们之间的关系构成的用于描述系统功能的视图。是系统的蓝图。    ...
  • 【UML】——状态图

    万次阅读 2018-09-08 10:20:19
    一、状态图 状态图用来描述一个特定对象的所有可能状态以及由于各种事件的发生而引起的状态之间的转移 1、状态图的图符 状态:矩形,四角为圆弧 转移:箭头 起点:一个黑点 终点:一个圈加一个黑点 2、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,203,825
精华内容 881,530
关键字:

状态图