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

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

讲课视频在线视频

下一节:讲课视频

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

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

学习了系统行为相关的知识之后

下边展开状态建模相关

内容的学习

进行状态建模

我们首先要确定状态的

建模的对象

图中我们给出了一个开关

在这个开关对象中

我们关注它的两个状态

分别是开和关

定义成on off

在on off这两个状态之间

切换的时候

要接受来自外界的事件

包括开关被按下

这就是一个最简单的

有限状态机的建模

由此我们可以看出

进行状态建模

首先我们要确定一个对象的

状态空间

把具体的状态和抽象的状态

定义好

之后 我们再把状态机

建模的主要元素确定下来

包括状态 迁移 事件和行为

这几个主要的概念

然后我们要了解

如何通过这些概念

以及这些建模元素

构造起一个能够符合

我们要求的状态机模型出来

在构造状态机模型的时候

我们主要关注的是组合状态

以及状态图的绘制方法

进行对象的状态建模

前提条件是所有的对象

都是有状态的

做一个极端情况

至少我们去表达

该对象的存在与否

存在和不存在

就成了该对象的两种状态

在对象存在的情况下

根据它的属性的不同取值

我们也可以规划出

在对象存在态的情况下的

更细的对象状态

每一个状态

都是有一组属性值来决定的

比如对一个堆栈对象来说

它可能处在以下的 N个状态

取决于栈的大小

栈中有几个元素

然后在状态之间的迁移

就是通过压栈和弹栈的操作

来完成的

有限状态机

比如下边的这个

长度为4的堆栈的

状态机模型中

它包含有限数量的状态

这也就意味着对象的属性取值

是一个有限的值域

对于这个最大容量为4的

堆栈来说

可以表达很多的动作序列

比如我们可以创建该堆栈对象

压栈 再压栈

阅读栈中最上面元素的值

弹栈 再压栈

也可以是先创建这个堆栈

压栈 弹栈

压栈 弹栈

也就是说

基于一个有限状态机的模型

我们可以表示无限长的

动作序列

但是 在这个模型中

我们却无法表达

下述的一些行为

比如是从Pop作为起始的

一个动作路径是不可能的

因为堆栈的这种数据结构中

我们只能先压栈再弹栈

也不可能有弹栈的操作数

超过压栈操作数的动作序列

也不存在多于4个压栈操作

而中间没有弹栈的操作

也就是说 通过这样的

状态机模型

我们可以表示

我们想允许的系统的行为

对于大部分的对象而言

它的状态空间都是非常庞大的

状态空间的大小

是由对象的每个属性的

取值空间的乘积 再加上1

比如 具有5个布尔型的

属性的对象

它就会有2的5次方加1个状态

具有5个整型属性取值的对象

就有最大整数5次方再加1个状态

具有5个实性属性的对象

则会有无穷多个状态

这里2的5次方加1

和最大整数的5次方加1

这个后边的加1

就是指对象不存在

这一个状态的定义

如果忽略我们存储空间的

局限性的话

状态空间是无限的

对于一个数据库

或者是一个Java

程序中的对象来说

它的状态表示是非常庞大的

但是 是有限的

因为如果我们把属性的

数据类型定义成是一个

有限的数据类型的话

那么它的状态空间

即便巨大 但也是有限的

但是 在现实世界中的对象

它的状态空间几乎总是无限的

那么 对于这样的情况

我们应该怎么处理

事实上尽管整个状态空间

是无限的

但我们真正感兴趣的相关的状态

以及相关的现象

则是一个比较小的集合

总可以针对这个小集合

开展我们的研究工作

面对一个庞大的状态空间

我们只是选取其中

最有探究价值的部分

开展研究

比如我们可能会忽略掉那些

不太可能出现的状态

对于整数或者实数型的值属性

我们只是在一定范围内取值

我们只是关注对象在满足

特定的约束的条件下的行为

比如按年龄分的话

对象可以分为年龄小于18岁

年龄界于18岁和65岁之间

以及年龄大于65岁

三种状态

也就是青少年 成人和老人

三种状态

对于费用这个属性

我们按照数值

也可以把它划为费用小于预算

费用为零 费用超过预算

费用超过预算10%以上

这四种状态

由此我们可以看出

模型的建立过程

实际上就是对状态空间

进行分解的过程

也就是状态划分的过程

对于一个堆栈对象来说

我们也可以按照刚才

给出的状态机的方式

来划分它的状态空间

也就是说 按照栈中所存的

元素的个数来划分状态

当然 我们也可以建立

更为抽象的模型

就是将堆栈的状态

划分为空和非空两种状态

由此我们可以看出

抽象之后的模型

我们可以表达出

更多的状态序列

上述的模型并不能防止

毯栈的个数多于压栈的个数

但是 它仍然表达了

很多的信息

那么 对这两个模型来说

你觉得哪一种更为合理

实际上我们知道

它的合理性取决于

我们观者的视角

我们究竟关注的是

什么样的行为

对于每个模型来说

它都有针对某些问题的适用性

针对某些问题的不适用性

因此 我们应该围绕

我们所关注的 感兴趣的性质

来建立相应的模型

依赖我们建模的

是现实世界的现象

还是我们想要设计的

系统的现象

我们可以有不同的

状态机的定义

比如 左边对人对象的定义

就是一个对现实社会中

人的生命周期中的

三个阶段的描述

童年 成年和老年

我们为相应的真实世界中的

对象赋予了相应的属性

以及相应的操作

主要按照年龄属性

小于18岁 小于65岁来分

但是 右边我们想要用

信息系统中的对象

来表示人相关的信息和行为

这个时候我们就可以为他

添加原本不属于现实世界中

对象的状态

比如说空状态以及死亡状态

那么 对这两个新状态的定义

实际上它是归属与信息对象的

而不是现实社会中的

那个具体的人的状态

因此 在对信息对象的

状态定义不同的情况下

我们为其赋予的属性

也是不同的

相应的操作也是不同的

在建模的过程中

我们要区分两种模型

首先 当我们针对应用领域的

实体建模的时候

是采用的描述型的模型

我们建模的是应用领域实体

可观测到的状态

比如一个电话的状态

有空闲 响铃 接通等等

这类模型表达的是

实体所处的状态

以及用什么操作可能会导致

这些状态发生迁移

另一类模型 则是愿望型的状态

它包括当我们描述应用领域中

实体所需具有的行为

以及机器领域中

实体所需具有的行为的时候

这类模型它描述的是

我们通过什么样的动作

保证预期结果是可以达到的

比如 描述电话的程控交换机

它当且仅当

被呼人接受了电话的

请求的时候

我们才为他接通了的电话

这样的模型可以区分

一系列的状态序列

或者是操作路径

是否是我们想要的结果

对机器领域行为的描述

是表达了我们希望机器

如何响应预期的输入事件

因此 这两类模型

我们用于不同的目的

可能在形式上二者相同

但是 当我们放在不同对象的

建模的时候

它所表达的意义就是不同的

如果单单在我们眼前

给出这样一个状态机模型的话

我们并不知道这个模型

是描述型的还是愿望型的

只有在把它放在具体的

应用的上下文的时候

告诉我们这是当前的

程控交换机的行为

或者是说这是我们希望

代设计系统

要满足的状态机图的时候

我们才能够明确的区分

它究竟是描述型的

还是愿望型的

软件工程课程列表:

第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章 期末考试与总结

-第一部分:基础知识

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

--编程与测试(选做)

讲课视频笔记与讨论

也许你还感兴趣的课程:

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