`
terryfeng
  • 浏览: 507028 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

UML 状态图

阅读更多

image

 

•状态和状态机

状态、状态表示法及状态机

状态是指在对象生命周期中满足某些条件、执行某些活动或等待某些事件的一个条件和状况

•一个状态通常包括名称、进入/退出活动、内部转换、子状态和延迟事件等五个部分组成

image

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

•如何阅读状态机图

阅读最简单的状态图

•最为核心的元素无外乎是两个:一个是用圆角矩形表示的状态(初态和终态例外);另一个则是在状态之间的、包含一些文字描述的有向箭头线,这些箭头线称为转换

image

转换的五要素

image

•源状态:即受转换影响的状态

•目标状态:当转换完成后对象的状态

•触发事件:用来为转换定义一个事件,包括调用、改变、信号、时间四类事件

•监护条件:布尔表达式,决定是否激活转换、

•动作:转换激活时的操作

读图小结

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

•而与状态on相关的转换也有两个,如果“水开了”就执行turnOff,关掉开关;如果烧坏了,就进入了终态了

image

复杂转换

转换类型

描述

语法

外部转换

      对事件做出响应,引起状态变化或自身转换,同时引发一个特定动作,如果离开或进入状态将引发进入转换、离开转换

事件(参数)[监护条件]/动作

内部转换

      对事件做出响应,并执行一个特定的活动,但并不引起状态变化或进入转换、离开转换

事件(参数)[监护条件]/动作

进入转换

     当进入某一状态时,执行相应活动

entry/活动

退出转换

      当离开某一状态时,执行相应活动

exit/活动

阅读带有复杂转换的状态图

image

只有动作描述,进入和退出和操作方法写在了里面

各种转换的区别

进入和退出转换:当进入一个状态时,执行某个动作;或当退出某个状态时,执行什么动作。这时就可以使用进入和退出转换来表示

内部转换:用来处理一些不离开该状态的事件

image

活动与延迟事件

•活动:当对象处于一个状态时,它一般是空闲的,在等待一个事件的发生。但是某些时间,你可能希望描述个正在进行的活动。在处于一个状态的同时,对象做着某些工作,并一直继续到被某个事件中断

•延迟事件:延迟事件是一种特殊的事件,它是指该事件不会触发状态的转换,当对象处于该状态时事件不会丢失,但会被延迟执行。例如,当E-mail程序中正在发送第一封邮件时,用户下达发送第二封邮件执令就会被延迟,但第一封邮件发送完成后,这封邮件就会被发送。这种事件就属于延迟事件

复合状态表示法

image 分解指示符

顺序复合状态图

image

监护条件为“应答音”,代表已连接。

并发复合状态图

image

三种评测方式

历史

•“一个圆圈中加上字母H”,是用来表示历史状态的。

它的含义是:当从状态“结账”和“显示购物车”返回子状态“显示索引信息”时,将进入的是离开时的历史状态。也就是说,转到购物车或结账区之后,再回到“浏览目录”的页面时,其中的内容是不变的,仍然保留原来的信息。

image

子状态机

•将子状态机单独定义,并对其进行命名(通常以大写字母开头),然后在需要使用的地方来引用它

image

引用C状态机

 

 

•如何绘制状态机图

绘制状态机图

•绘制状态机图的理想步骤是:寻找主要的状态,确定状态之间的转换细化状态内的活动与转换,用复合状态来展开细节

•寻找主要状态:对于航班机票预订系统而言,显然包括的状态主要有
-- 在刚确定飞机计划时,显然是没有任何预订的,并且在有人预订机票之前都将处于这种“无预订”状态
-- 对订座而言显然有“部分预订”和“预订完”两种状态
-- 而当航班快要起飞时,显然要“预订关闭”
总结一下,主要有四种状态:无预订、部分预订、预订完以及预订关闭

•确定状态间转换

表格横向是转出

表格纵向是转入

源目标

无预订

部分预订

预订完

预订关闭

无预订

预订()

不直接转换

关闭()

部分预订

退订(),使预订人=0

预订(),无空座

关闭()

预订完

不直接转换

退订()

关闭()

预订关闭

无转换

无转换

无转换

image 

•细化状态内的活动与转换

image

•使用复合状态

image

•状态机图应用说明

•对对象生命周期建模:主要描述对象能够响应的事件、对这些事件的响以及过去对当前行为的影响

•对反应型对象建模:这个对象可能处于的稳定状态、从一个状态到另一个状态之间的转换所需的触发事件,以及每个状态改变时发生的动作

•状态机图既可以用来表示一个业务领域的知识,也可以用来描述设计阶段对象的状态变迁

•本章小结

•首先介绍了“状态”的概念和UML表示法,然后引入了状态机的概念

•通过三个例子逐一说明简单状态机图、包含复杂转换的状态机图以及包含复合状态的状态机图的阅读方法

•,紧接着通过一个航班机票预订系统来阐述了状态图的绘制过程:确定状态,分析状态间的转换,细化活动与内部转化,通过复合状态来组织

•简明地点出状态图的两大功能:对对象的生命周期建模以及对反应型对象的行为建模

 

内容出自:UML 面向对象设计PPT

分享到:
评论

相关推荐

    UML 状态图 uml 教程

    UML 状态图 uml 教程 UML(Unified Modeling Language)是一种标准化的建模语言,广泛应用于软件开发、系统设计和项目管理等领域。状态图是 UML 中的一种重要建模工具,用于描述对象在生命周期中的状态变化和转换...

    UML状态图详细介绍PPT

    本篇详细介绍了UML状态图,结合图书馆管理系统设计的实例,有助于理解其核心概念。 首先,我们要了解状态图的基本构成。状态图由事件、状态和转换组成。事件是触发状态改变的因素,可以是外部的,如用户操作,也...

    嵌入式系统的微模块化程序设计-实用状态图CC++实现,UML状态图的实用CC++设计

    在这个主题中,我们将深入探讨如何在CC++环境中实现微模块化,以及如何利用UML状态图来辅助设计。 首先,UML(统一建模语言)状态图是一种图形表示法,用于描绘一个对象在其生命周期中的行为。状态图展示了对象在...

    UML状态图(WINDOWS GUI及电梯)

    UML状态图(WINDOWS GUI及电梯) UML状态图是 Unified Modeling Language(统一建模语言)的组成部分,用于描述系统的状态和状态之间的转换关系。在本文档中,我们将讨论两个UML状态图设计,分别是WINDOWS GUI状态...

    UML状态图实用C++设计嵌入式系统事件驱动型编程技术

    本主题聚焦于"UML状态图"在"实用C++设计嵌入式系统事件驱动型编程技术"中的应用。 状态图是UML的组成部分之一,它用于描述对象在其生命周期中的行为,这些行为由一系列状态组成,状态之间通过转换来表示对象如何...

    uml状态图和活动图

    关于uml状态图和活动图的分析和画法给出了关于图书管理系统的状态图和活动图

    UML状态图的应用

    ### UML状态图在回归测试中的应用 #### UML状态图简介 统一建模语言(UML)是一种广泛使用的可视化建模语言,用于软件工程中系统的行为和结构建模。UML状态图是UML中的一种图形化表示方法,主要用于描述对象在其...

    uml状态图-UML状态图在系统分析与设计中的应用及其组成要素解析

    内容概要:本文介绍了UML状态图的定义及基本组成部分,包括状态、转换、事件、动作、监护条件等。通过对状态、转换的具体实例讲解,详细解析了这些概念的实际应用方法,强调状态图在系统开发周期的不同阶段(如分析...

    UML状态图:系统对象状态与转换的图形化表达

    内容概要:本文介绍了UML状态图的基本概念及其基本组成元素,包括状态、初始状态、最终状态、转移、触发事件、内部活动和条件等。详细阐述了各组成部分的功能、表示形式及应用情境,尤其强调了在状态驱动系统中的...

    本文简要介绍了uml状态图

    uml状态图

    uml状态图

    ### UML状态图详解 #### 实验六:状态图 ##### 一、实验目的 1. **熟悉状态图的基本功能和使用方法**:状态图是一种UML(统一建模语言)图表,用于描述一个对象在其生命周期中的不同状态,以及这些状态之间的转换...

    基于UML 状态图的面向对象软件测试用例生成

    ### 基于UML状态图的面向对象软件测试用例生成 #### 一、引言 随着软件行业的快速发展,软件测试技术也在不断地进步和完善。软件测试自动化是提高软件质量的关键手段之一,它有助于减少测试成本,提升测试效率。...

    UML状态图和活动图的分析与设计

    ### UML状态图和活动图的分析与设计 #### 实验背景与目标 在现代软件工程领域,统一建模语言(UML)作为一套标准化的建模语言,为软件开发人员提供了一种可视化、规范化的建模工具。其中,状态图(State Diagrams...

    UML状态图的C实现

    本项目"UML状态图的C实现"正是基于这样的设计理念,通过C语言实现了UML状态图,同时还包含了一个抢占式和非抢占式的内核,这为开发高效、实时的嵌入式系统提供了可能。 首先,UML(统一建模语言)状态图是一种可视...

    UML状态图的实用 C/C++ 设计

    本文将深入探讨UML状态图在C/C++编程中的应用,以及如何将这些设计概念转化为实际的、事件驱动的嵌入式系统代码。 首先,"UML状态图的实用C/C++设计"这一主题意味着我们要将UML的高级概念转化为具体的C/C++代码实现...

Global site tag (gtag.js) - Google Analytics