课件
“状态”建模
进行涨停建模,首先要确定状态的建模对象。
图中我们给出了一个开关,在这个开关对象中我们关注它的两个状态分别是开和关,定义成 on、off,在 on、off 这两个状态之间切换的时候要接受来自外界的事件,包括开关被按下,这就是一个最简单的有限状态机的建模。
由此我们可以看出,进行状态建模
- 首先我们要确定一个对象的状态空间,把具体的状态和抽象的状态定义好。
- 之后我们再把状态机建模的主要元素确定下来,包括状态、迁移、事件和行为这几个主要的概念。
- 然后我们要了解如何通过这些慨念以及这些建模元素,构造起一个能够符合我们要求的状态机模型出来。在构造状态机模型的时候,主要关注的是组合状态以及状态图的绘制方法。
对象及其状态
进行对象的状态建模,前提条件是所有的对象都是有状态的。
做一个极端情况,至少我们去表达该对象的存在与否,存在和不存在就成了该对象的两种状态。
在对象存在的情况下,根据它的属性的不同取值,规划出在对象存在态情况下的更细的对象状态。
每一个状态都是有一组属性值来决定的,比如对一个堆栈对象来说,它可能处在以下的 N 个状态,取决于栈的大小:
栈中有几个元素,状态之间的迁移就是通过压栈和弹栈的操作来完成。
有限状态机
上图长度为 4 的堆栈的状态机模型中,它包含有限数量的状态,意味着对象的属性取值是一个有限的值域,对于这个最大容量为 4 的堆栈来说,可以表达很多的动作序列,比如我们可以创建该堆栈对象、压栈、再压栈,阅读栈中最上面元素的值,弹栈、再压栈。也可以是先创建这个堆栈、压栈、弹栈。基于一个有限状态机的模型,可以表示无限长的动作序列。但是在这个模型中却无法表达下述的一些行为,比如是从 Pop 作为起始的一个动作路径是不可能的,因为堆栈的这种数据结构中我们只能先压栈再弹栈,也不可能有弹栈的操作数超过压栈操作数的动作序列,也不存在多于 4 个压栈操作而中间没有弹栈的操作。通过这样的状态机模型,可以表示我们想允许的系统的行为。
状态空间
对于大部分对象而言,状态空间是非常庞大的。状态空间的大小是由对象的每个属性的取值空间的乘积再加上 1。例如:
- 具有 5 个布尔值属性的对象有 25+1 个状态
- 具有 5 个整数值属性的对象有 最大整数5 +1 个状态
- 具有 5 个实数值属性的对象具有无穷个状态
其中,+1 就是指对象不存在这一个状态的定义。
如果忽略计算机表示的局限性,状态空间是无限的。
状态的抽象表示
面对一个庞大的状态空间,我们只是选取其中最有探究价值的部分开展研究。比如:
- 我们可能会忽略掉那些不太可能出现的状态
- 对于整数或者实数型的值属性,只在一定范围内取值
- 我们只是关注对象在满足特定约束条件下的行为
- 例如,对于年龄,我们经常选择以下的范围:age < 18; 18 ≤ age ≤ 65; age > 65
- 例如。对于费用信息,我们更关注的约束划分为:cost ≤ budget, cost=0, cost > budget, cost > ( budget + 10% )
模型建立的过程—状态空间的分解
模型的建立过程,实际上就是对状态空间进行分解的过程,也就是状态划分的过程。
对于一个堆栈对象来说,可以按照栈中所存的元素的个数来划分状态,当然,也可以建立更为抽象的模型(如箭头下方的图),将堆栈的状态划分为空和非空两种状态。
由此看出,抽象之后的模型可以表达出更多的状态序列。
模型的合理性取决于观察者的视角,究竟关注的是怎样的行为,对于每个模型来说它都有针对某些问题的适用性,针对某些问题的不适用性,由此,应该围绕我问所关注的感兴趣的性质来建立相应的模型。
建模什么?——现实世界还是机器世界
依赖我们建模的是现实世界的现象还是我们想要设计的系统的现象,我们可以有不同状态机的定义。
比如上图对人对象的定义就是一个对现实社会中人的生命周期中的主个阶段的描述,童年、成年和老年,为相应的真实世界中的对象赋予了相应的属性以及相应的操作,主要按照年龄属性小于 18 岁、小于 65 岁来分。
但上图我们想要用信息系统中的对象来表示人相关的信息和行为,这时就可以为他添加原本不属于现实世界中对象的状态,比如说空状态以及死亡状态,对这两个新状态的定义实际上它是归属与信息对象的,而不是现实社会中具体的人的状态。
因比在对信息对象的状态定义不同的情况下,为其赋予的属性也是不同的,相应的操作也是不同的。
对什么建模?
建模过程中,要区分两种模型:
- 首先当我们针对应用领域的实体建模的时,采用描述型(indicative)的模型,建模的是应用领域实体可观测到的状态;
- 比如一个电话的状态有空闲、响铃、接通等等
- 这类模型表达的是实体所处的状态,以及用什么操作可能会导致这些状态发生迁移
- 另一类模型则是愿望型(optative)的状态,包括当我们描述应用领域中实体所需具有的行为,以及机器领域中实体所需具有的行为;
- 比如描述电话的程控交换机,它当且仅当被呼人接受了电话的请求的时候,才为他接通电话
- 这类模型它描述的是我们通过什么样的动作保证预期结果是可以达到的
这样的模型可以区分一系列的状态序列,或者是操作路径是否是我们想要的结果。
对机器领域行为的描述是表达了我们希望机器如何响应预期的输入事件,因此这两类模型用于不同的目的,在形式上二者相同,但当我们放在不同对象的建模时,它所表达的意义就是不同的。