UML图例之状态图

  利用状态图模拟响应系统,反应系统模型声明周期,将静态的业务可以动态流动起来,按照预定的状态进行业务描述。

一、基本概念

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

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

  状态机是计算机科学理论的一部分,但UML中的状态机模型主要是基于David Harel所做的扩展,是用来展示状态与状态之间转换的图。

二、基本元素

1.状态的组成部分

  • 状态名(name)
  • 进入/退出动作(entry/exit action)
  • 内部转换(internal transition)
  • 子状态(substate)
  • 延迟事件(defferred event)

2.状态图的要素

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

3.状态的类型

①按状态过程分:

  一个状态图只能有一个初态,但终态可以有一个或多个,也可以没有终态。

  中间状态包括两个区域:名字域和内部转移域,如图所示。其中内部转移域是可选的。

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

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

  组合状态可以使用“与”关系分解为并发子状态,或者通过“或”关系分解为互相排斥的顺序子状态。

  • 顺序子状态:如果一个组成状态的子状态对应的对象在其生命期内的任何时刻都只能处于一个子状态,即多个子状态之间是互斥的,不能同时存在,这种子状态称为顺序子状态。

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

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

  • 浅(shallow)历史状态, 只记住最外层组合状态的历史。
  • 深(deep)历史状态, 可以记住任意深度的组合状态的历史。

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

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

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

  举例:与状态off相关的转换有两个,其触发事件都是turnOn,只不过其监护条件不同。如果对象收到事件turnOn,那么将判断壶中是否有水;如果[没水],则仍然处于off状态;如果[有水]则转为on状态,并执行“烧水”动作。而与状态on相关的转换也有两个,如果“水开了”就执行turnOff,关掉开关;如果烧坏了,就进入了终态了。

  • 转换的类型

转换类型

描述

语法
外部转换 对事件做出响应,引起状态变化或自身转换,同时引发一个特定动作,如果离开或进入状态将引发进入转换、离开转换 事件(参数)[监护条件]/动作
内部转换 对事件做出响应,并执行一个特定的活动,但并不引起状态变化或进入转换、离开转换 事件(参数)[监护条件]/动作
进入转换 当进入某一状态时,执行相应活动 entry/活动
退出转换 当离开某一状态时,执行相应活动 exit/活动

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

  • 信号signer事件

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

  • ②调用call事件

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

  • 变化change事件

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

  • 时间time事件

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

6.状态图建模步骤:

①找出适合用模型描述其行为的类。

②确定对象可能存在的状态。

③确定引起状态转换的事件。

④确定转换进行时对象执行的相应动作。

⑤对建模的结果进行相应的精化和细化。

三、简单案例

  采样点位状态变更过程:初始状态为待采样,如果点位采集到了样品,则变更点位状态到已采样,点位存在无法采样情况,可以取消采样,变更状态到无效,点位存在当前不可以采样,可以变更状态到待补采,采集的样品交接完毕,点位变更状态到已完成,采样活动结束。

 至此,针对UML状态图的相关内容做了大概的总结,利用状态图,可以快速掌握具体对象的生命周期。

2020-02-06,望技术有成后能回来看见自己的脚步

原文地址:https://www.cnblogs.com/CKExp/p/12262919.html

时间: 2024-08-14 00:38:57

UML图例之状态图的相关文章

UML建模之状态图(Statechart Diagram)

 状态图目录: 一.状态图简介(Brief introduction) 二.状态图元素(State Diagram Elements) 1.状态(States) 2.转移(Transitions) 3.动作(State Actions) 4.自身转移(Self-Transitions) 5.组合状态(Compound States) 6.进入节点(Entry Point) 7.退出节点(Exit Point) 8.历史状态(History States) 9.并发区域(Concurrent Re

UML图例之用例图

用例图主要用来描述“用户.需求.系统功能单元”之间的关系,在需求分析阶段,常会借助用例图,从用户的角度描述系统的功能,以图形可视化的方式作为开发团队与客户的交流,同时也有助于形成统一语言. 一.用例图描述 用例图(Use Case Diagrame):描述了人们希望如何使用一个系统,将相关用户.用户需要系统提供的服务以及系统需要用户提供的服务更清晰的显示出来,以便使系统用户更容易理解这些元素的用途,也便于开发人员最终实现这些元素.之所以说用例图至关重要,是由于用户并不关心系统的实现和内部结构,只

Python设计模式 - UML - 总览

说到设计模式就不得不涉及建模思想,说到建模思想自然而然会应用UML,目前业界开源的UML工具很多,用起来也非常便捷.近几年来随着软件应用领域开发模式转向快速迭代试错,UML在敏捷开发,尤其是web及mobile开发领域应用越来越少. 就国内软件行业发展现状来说,稳定成熟的商业软件凤毛麟角,初具雏形的互联网App大行其道,竞争中的公司更看重的是快速占领市场,小团队快速迭代试错,而不是长期.精心打磨同一款软件产品,所以注重统一规范.充分需求分析.严密框架设计的UML显得相对繁琐,自然会被灵活敏捷的各

牛腩新闻系统(一)——UML、数据库设计

一.初识牛腩系统 牛腩(Brisket)即牛腹部及靠近牛肋处的松软肌肉,是指带有筋.肉.油花的肉 块.这是一种统称. 若依部位来分,牛身上很多地方的肉都能够叫做牛腩,牛腩主要特 点是筋肉多,油少,甚至全是瘦肉.看来学习的这个系统.牛腩新闻系统是B/S中的精 华.经典呀! 以下一起就開始品尝吧.                 二.学习牛腩须要的软件 1.主要是要安装VS 和数据库SQL 2.其它软件: Dreamweaver        Flash        PhotoShop 3.浏览器

java 类与类之间的关系 及uml图

类与接口之间的关系 : 继承 类与类之间的关系 :继承关系  包含关系 类与对象之间的关系 : 实例 UML 类图中类与类之间的关系: 泛化关系(generalization) 关联关系(association) 聚合关系(aggregation) 合成关系 (compostion) 依赖关系 (dependency) 1.泛化(Generalization)[泛化]表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系.一般化的关系是从子类指向父类的,与继承或实现的方法相反.

UML用户指南--UML图简介

本节和大家一起学习一下UML图,这里主要介绍UML结构图和UML行为图两部分,下面让我们一起看一下UML图的详细介绍吧. UML图 这里再次提到对软件体系结构进行可视化.详述.构造和文档化,有5种最重要的互补视图:用况视图(usecaseview).设计视图(designview).进程视图(processview).实现视图(implementationview).实施视图(deploymentview).每一种视图都包含结构建模(对静态事物建模)和行为建模(对动态事物建模). UML中包含9

UML9种图中的状态图

状态图是UML中对系统动态方面建模的图之一,通过建立对象的生命周期模型来描述对象状态随时间变化的动态行为.系统中对象的状态最容易发现和理解的,所以建模时首先考虑基于状态间的控制流.具体来说, 状态图用于描述模型元素的实例的行为,适用于描述状态和动作的顺序,不仅可以展示一个对象拥有的状态,还可以说明事件如何随着时间的推移来影响这些状态. 先来了解下状态机,状态机是一种记录下给定时刻状态的设备,可以根据各种不同的输入对每个给定的变化而改变其状态或引发一个动作,如各种客户端软件.Web上的各种交互页面

系统分析与设计UML建模

UML的历史 1997年,OMG组织(Object Management Group对象管理组织)发布了统一建模语言(Unified Modeling Language,UML).UML的目标之一就是为开发团队提供标准通用的设计语言来开发和构建计算机应用.UML提出了一套IT专业人员期待多年的统一的标准建模符号.通过使用UML,这些人员能够阅读和交流系统架构和设计规划--就像建筑工人多年来所使用的建筑设计图一样.2003年,UML已经获得了业界的认同.在所见过的专业人员的简历中,75%都声称具备

使用Visio画UML模型

Microsoft Office Visio“UML 模型图” 模板为创建复杂软件系统的面向对象的模型 (模型:建模系统的一种抽象表示,它从特定的视角并在某一抽象级别上指定建模系统.) 提供全面的支持. 1.用例图 在开发项目的早期阶段,使用用例图 (用例:在用例图中,当主角使用系统来完成某一进程时所发生的一组事件的表示方式.通常,用例是相当大的进程,而不是单个步骤或事务.) 来描述实际活动和动机.可以在随后的各个阶段对该用例图进行细化,以反映用户界面和设计细节. 定义系统边界 (系统边界:在用