当前课程知识点:软件工程 >  第10章 行为建模 >  10.5 状态图 >  讲课视频

返回《软件工程》慕课在线视频课程列表

讲课视频在线视频

下一节:讲义视频

返回《软件工程》慕课在线视频列表

讲课视频课程教案、知识点、字幕

关于状态建模

我们已经说了很多原理性的知识

下边我们再对状态图的

文法表示进行进一步的介绍

在UML中

状态图用来表示一个类对象的

全生命周期的过程

在系统中 类最主要的动态行为

就是对它们自身的状态

进行检查和管理

状态图关注的就是一个类对象

全生命周期的状态切换

每一个状态都是对象

所能处在的一个上下文条件

我们来看课件图中的

这个状态机

它为这个类定义了5个状态

包括开始状态

也就是对象创建意识时

所处的状态

以及对象撤销时

所处的结束状态

一般来说

对象有且只有一个起始状态

但是可以没有

或者有多个结束状态

对象的迁移描述的是

对象如何从一个状态

进入另外一个状态

迁移的发生可以由事件出发

也可以是在迁移的过程中

执行某些操作

比如在课程的讲授过程中

有学生中途退课

当退课的学生人数

导致课程注册人数

下降为零的时候

课程就结束了

这里 学生人数的监控

是通过一个卫士的条件来完成的

在状态的内部

对象也可以执行一系列的活动

活动的开始进入该状态

活动完成时退出该状态

这个时候状态图

也可以演化为一个活动图

状态图关注的活动核心行为

是迁移的效果

状态的出入条件和动作

以及状态持续期间的条件和动作

由此我们可以看到

状态图的建模元素包括

状态 事件和状态迁移

还包括特殊状态的定义

比如初始状态 结束状态

组合状态 嵌套状态

历史状态以及状态图的绘制

这就是我们下面要介绍的内容

状态 定义为一个对象

生命周期中的一个阶段

在该阶段中

对象要满足一些特定的条件

执行特定的活动

或者等待某些事件的发生

它的具体体现是对

对象属性的取值

包含状态的入口

或者出口条件及行为的描述

它从不同的抽象层次上

分析对象的行为

因此 状态的定义

是可以嵌套 组合的

针对给定的场景

对象的状态是确定的

也就是说 可以满足

或者不满足某个状态

事件在状态的迁移过程中

有重要的作用

事件定义为可以触发对象

状态改变的那些外部刺激

在面向对象的上下文下

也就是对象消息的发出

与接收

它决定状态迁移何时发生

状态迁移是对象状态之间的

一种动态关系

当一个触发事件发生

或者迁移条件满足时

就会发生从源状态

到目标状态的一次转变

从这个定义我们可以看出

状态迁移的发生要求

当且仅当迁移条件满足的时候

才会触发

每一个状态迁移都伴随着一个

触发事件

同时 还要满足一定的

警戒条件

当触发事件发生

或者相关的警戒条件满足的时候

一个切实可行的状态迁移

将会被触发

状态迁移的过程

有时候还会伴随相关的对象操作

在UML状态图中的状态

它定义为在某个时间段内

某条陈述是正确的

一般来说这个陈述是

关于对象的属性取值的

一个表达式

比如这里给出的例子

就是说当前的项目

它处在预算还是有结余的状况

或者是说某个动作正在执行

以及在某个时间等待触发

比如检查订单商品的存活

这个动作等在执行

或者等待缺货的产品到货

这些都是一个状态的定义

一个状态的相关的活动类型

可以是状态持续期内的活动

用关键字do/activity来表示

意思就是当对象

处于这个状态的时候

这个活动就会一直执行

直到离开这个状态

入口动作或者出口动作

是指进入或者离开这个状态时

需要执行的一次性的动作

包含子图这样的关系

就是指在当前的状态下

我们会转到另一个完整的状态图

形成分层次的状态图

也是就嵌套关系

这里我们给出了状态的

定义的例子

可以看出在状态的定义中

我们首先有状态名的定义

以及刚才所提到的

各种状态相关活动的定义

两个特殊的状态

分别是初始状态和结束状态

初始状态是一个实心原点

结束状态是一个靶子形状的

带实心原点的一个圆圈

UML状态图中

迁移的定义包括五部分的内容

首先是源状态

其次是触发事件 警戒条件

和相伴的动作

最后是目标状态

我们通过图中可以看出

中间迁移的线上

应该标注的是按触发事件

警戒条件和动作的顺序排列

源状态和目标状态

分别处于这个迁移线的

左侧和右侧

对于一个给定的状态

我们只能发生一个迁移

这样才是一个

确定行为的状态机

因此 从相同的状态出发

事件相同的几个迁移之间

它的迁移条件一定是互斥的

也就是说 迁移条件

不能存在重叠或遗漏的情况

UML状态图中

对事件的定义的意义在于

它帮助系统了解

正在发生什么事情

状态图中事件仅需和系统

或当前建模的对象相关

它从系统的角度出发

事件必须建模成一个

瞬间可以完成的原子动作

比如完成工作 考试未通过

系统崩溃等等

在面向对象设计中

通过传递消息来实现事件

UML中 有四种典型的事件

首先是变更事件

也就是说当给定的条件成立时

发生一个状态的变化

或者调用事件

向给定的对象发出调用

某个操作或者执行某个命令的

这样的事件

时间相关的事件

是指某个时间段过去

或者某个特殊的时刻来临

信号事件是指给定的信号

收到了某些实时的

信号处理要求

变更事件可以通过

布尔表达式中

变量的改变来表示

也就是说 通过改变变量的值

来使得事件触发

这种事件的表达

往往就是一个条件表达式

比如当温度大于120度的时候

要报警

变更事件和警戒条件的

区别在于

警戒条件只是在

所相关的事件所出现时

计算一次

而变更事件

则是要监控 反复监控 持续监控

调用事件是指

当前对象的状态迁移时

未发出一个动作

调用其它对象的方法

它要包括事件的名字

和该调用事件的参数的列表

这里我们是说从手工状态

转成自动状态的时候

我们要发出调用

自动导航功能这样一个事件

时间事件是通过时间表达式

来表示的事件

它可以表示

一个绝对时间点的到来

也就是时刻

或者经过一个时间段之后

对象进入了一个新的状态等等

常用的关键字是

when and after

在这一个状态图中

我们可以看到从活动态

进入空闲态

是说经过2秒钟

就从活动态进入空闲态

然后在这个迁移发生的时候

要把电话的连接破坏掉

从第二个活动态进入空闲态

是指当2000年的1月1日

到来的时候

我们要进入空闲态

信号事件是由一个对象

异步的发送

并由另一个对象接收的

命名对象

它可能引起对象的状态迁移

表达了对象之间的

异步通信关系和行为

信号事件和调用事件的区别在于

信号是一个异步的事件

而调用则是一个同步的事件

UML状态图中

动作定义为在对象状态内部

或者状态间迁移时

所执行的原子操作

两个特殊的动作

分别是入口和出口动作

用关键字entry和action来标记

在动作定义表达式中

我们可以引用当前对象的属性

或者在输入事件中

所获得的参数

从状态抽象的角度来讲

动作是具有原子性的

及时性 不可中断

它的执行时间可以忽略不计

我们需要注意的一点是

动作是由当前的对象

向外发出的消息

因此 它一定是由

外部的对象提供的某种服务

而当前对象所接收到的事件

是来自外部对象的调用

或者是服务请求

因此 它一定是当前对象

对外提供的操作

这里我们给出的是一个

订单处理对象的

生命周期的状态机图

在这个图中

订单处理对象一经创建

就进入了检查订单项的状态

在从初始状态

到检查状态的迁移

发生的时候

它将发出一个动作

就是获取第一个订单项

在订单检查的过程中

任何一个订单项

如果没有货的话将进入等待状态

一旦货品备齐将进入发货状态

在发货状态下

它将创建一个运货的

初始请求

初始化过程

一旦货品发出

它就进入Delivered状态

当货品送到之后

该定单处理对象

自动进入结束状态

也就是对象完成执行

从这个状态机图我们可以看到

斜杠后边的就是

当前迁移发生的时候

由该对象发出的动作

也就是要调用

其它的对象的一个操作

而不带斜杠的字符串

表达的是接收到的事件

也就是取下一个订单项

比如送货

这个都是当前对象

可以响应到的操作

而方括号引用的

则是条件表达式的定义

这些都属于警戒条件

也就是说

通过检查这些条件的满足与否

我们能够确定是在当前状态下

循环执行

还是进入下一个状态

完成状态的迁移

对这样简单的一个业务逻辑

我们能够通过状态图

非常清楚的表达出来

订单出来的流程

因此 任何一个状态相关的

这样的对象的生命周期

用状态图表示

都能帮我们理清

系统的业务流程

因此 我们会为系统的主要的

信息对象建立状态机模型

软件工程课程列表:

第1章 初识软件工程

-1.1 软件无处不在

--讲课视频

-1.2 软件的本质特性

--讲授视频

-1.3 软件工程的产生与发展

--讲授视频

-1.4 软件工程的基本概念

--讲授视频

-1.5 软件质量实现

--讲授视频

-1.6 业界人士谈软件工程

--海芯科技创始人施侃乐访谈

-测验题--作业

-讨论题

--讨论题

-作业题

--第一张 作业题

第2章 编写高质量代码

-2.1 编程过程与规范

--讲课视频

-2.2 良好的编程实践

--讲课视频

-2.3 Python集成开发环境

--讲课视频

-2.4 代码静态检查

--讲课视频

-2.5 代码性能分析

--讲课视频

-2.6 结对编程实践

--讲课视频

-2.7 刘贺谈软件工程

--讲课视频

--讨论

-测验题--作业

-作业题

--第二章 作业题

第3章 单元测试

-3.1 单元测试概述

--讲课视频

-3.2 黑盒测试方法

--黑盒测试方法

-3.3 白盒测试方法

--基本概念

--代码覆盖标准

--基本路径测试

-3.4 单元测试工具

--单元测试工具

--html

-测验题--作业

-作业题

--第三章 作业题

--作业题附件

第4章 软件开发过程

-4.1 软件过程

--讲课视频

-4.2 软件过程模型

--讲课视频

-4.3 敏捷开发过程

--讲课视频

-4.4 微软公司开发过程

--邹欣经理自我介绍

--微软开发过程之一

--微软开发过程之二

-测验题--作业

第5章 团队开发管理

-5.1 团队组织与管理

--讲课视频

-5.2 项目沟通管理

--讲课视频

-5.3 软件项目计划

--讲课视频

-5.4 软件项目估算

--讲课视频

-测验题--作业

-讨论题

--讨论

第6章 敏捷开发与配置管理

-6.1 敏捷开发之Scrum

-- 敏捷开发之Scrum

--html

-6.2 用户故事与估算

--讲课视频

-6.3 团队协作工具Tower

--Tower工具介绍(1)

--Tower工具介绍(2)

-6.4 配置管理

--讲课视频

-6.5 配置管理工具Git

--讲课视频

-测验题--作业

-作业题--作业

第7章 需求获取

-7.1 需求工程师

--讲课视频

-7.2 需求定义

--讲课视频

-7.3 需求的类型

--讲课视频

--讲课视频(2)

-7.4 需求工程过程

--讲课视频

-7.5 需求的主要来源

--讲课视频

-7.6 需求获取技术

--讲课视频

--讲课视频二

--讲课视频三

-7.7 撰写需求文档

--讲课视频

-测验题--作业

-讨论题

--讨论

第8章 用例建模

-8.1 用例建模概念

--讲课视频

-8.2 用例建模过程

--讲课视频

-8.3 用例建模精讲

--讲课视频

-8.4 建模工具介绍

--讲课视频

-8.5 微信抢票应用案例

--讲课视频

-测验题--作业

-讨论题

--讨论

第9章 面向对象分析与设计

-9.1 面向对象分析

--讲课视频

-9.2 CRC卡片分拣法

--讲课视频-1

--讲课视频-2

-9.3 面向对象设计

--讲课视频-1

--讲课视频-2

-9.4 类图建模

--讲课视频-1

--讲课视频-2

-第9章 面向对象分析与设计--测验题

-讨论题

--讨论

第10章 行为建模

-10.1 顺序图概念

--讲课视频

-10.2 顺序图建模

--讲课视频

-10.3 顺序图风格

--讲义视频

-10.4 状态建模

--讲课视频

-10.5 状态图

--讲课视频

-10.6 状态图精讲

--讲义视频

-测验题--作业

-讨论题

--讨论

第11章 软件系统设计

-11.1 软件体系结构概念

--讲授视频

-11.2 软件设计原则

--讲授视频

-11.3 软件体系结构风格(一)

--讲授视频

-11.4 软件体系结构风格(二)

--讲授视频

-11.5 软件体系结构风格(三)

--讲授视频

-11.6 软件设计过程

--讲授视频

-11.7 Web系统架构设计

--讲授视频

-11.8 数据库选择策略

--讲授视频

-测验题--作业

-作业题

--html

--html

--html

-作业题--作业

第12章 软件交互设计

-12.1 交互设计概述

--讲授视频

-12.2 交互设计目标

--讲授视频

-12.3 GUI设计原则

--讲课视频

-12.4 KLM效率模型

--Video

-12.5 Fitts定律

--讲授视频

-12.6 交互设计过程

--讲授视频

-测验题--作业

第13章 软件系统测试

-13.1 软件测试概念

--讲课视频

-13.2 软件测试类型

--讲课视频

-13.3 软件功能测试

--讲课视频

-13.4 软件性能测试

--讲课视频

-测验题--作业

第14章 软件交付与维护

-14.1 软件部署与交付

--讲课视频

-14.2 软件演化与维护

--讲课视频

-测验题--作业

第15章 期末考试与总结

-第一部分:基础知识

-第二部分:编程与测试(选做)

--编程与测试(选做)

讲课视频笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。