6.1 概述
状态是给定类的对象的一组属性值,这组属性值对所发生的事件具有相同性质的反应.换而言之,处于相同状态的对象对同一事件具有同样方式的反应,所以当给定状态下的多个对象当接受到相同事件时会执行相同的动作,然而处于不同状态下的对象会通过不同的动作对同一事件做出不同的反应.例如,当自动答复机处于处理事务状态或空闲状态时会对取消键做出不同的反应. 【程序编程相关:<<深度探索C++模型>】 状态机视图通过对类对象的生存周期建立模型来描述对象随时间变化的动态行为.每一个对象都被看作是通过对事件进行探测并做出回应来与外界其他部分通信的独立的实体.事件表示对象可以探测到的事物的一种运动变化—如接受到从一个对象到另一个对象的调用或信号.某些值的改变或一个时间段的终结.任何影响对象的事物都可以是事件,真实世界所发生的事物的模型通过从外部世界到系统的信号来建造的. 【推荐阅读:可怜的bool】6.2 状态机 【扩展信息:在DirectX下弹出对话框】 状态机用于描述类的行为,但它们也描述用例.协作与方法的动态行为.对这些对象方面而言,一个状态代表了执行中的一步.我们通常用类与对象来描述状态机,但是它也可以被其他元素所直接应用. 状态机是展示状态与状态转换的图.通常一个状态机依附于一个类,并且描述一个类的实例对接受到的事件所发生的反应.状态机也可以依附于操作.用例与协作并描述它们的执行过程.状态机是一个类的对象所有可能的生命历程的模型.对象被孤立地从系统中抽出与考察,任何来自外部的影响被概述为事件.当对象探测到一个事件后,它依照当前的状态做出反应,反应包括执行一个动作与转换到新状态.状态机可以构造成继承转换,也能够对并发行为建立模型.状态机是一个对象的局部视图,一个将对象与其外部世界分离开来并独立考查其行为的图.利用状态机可以精确地描述行为,但不适合综合理解系统执行操作.如果要更好地理解整个系统范围内的行为产生的影响,那么交互视图将更有用些.然而,状态机有助于理解如用户接口与设备控制器这样的控制机.6.3 事件 事件是发生在时间与空间上的一点的值得注意的事情.它在时间上的一点发生,没有持续时间.如果某一事情的发生造成了影响,那么在状态机模型中它是一个事件.当我们使用事件这个词时,通常是指一个事件的描述符号,即对所有具有相同形式的独立发生事件的描述,就像类这个词表示所有具有相同结构的独立类一样.一个事件的具体发生叫做事件的实例.事件可能有参数来辨别每个实例,就像类用属性来辨别每个对象.对类而言,信号利用泛化关系来进行组织,以使不同的类共享公用的结构.事件可以分成明确或隐含的几种:信号事件.调用事件.修件事件.时间事件等.表6-1是几种事件类型及其描述.6-1 事件的种类
1. 信号事件 信号是作为两个对象之间的通信媒介的命名的实体,信号的接收是信号接受对象的一个事件.发送对象明确地创建并初始化一个信号实例并把它发送到一个或一组对象.最基本的信号是异步单路通信,发送者不会等待接收者如何处理信号而是独立地做它自己的工作.在双路通信模型中,要用到多路信号,即至少要在每个方向上有一个信号.发送者与接受者可以是同一个对象. 信号可以在类图中被声明为类元,并用关键字«signal»表示,信号的参数被声明为属性.同类元一样,信号间可以有泛化关系,信号可以是其他信号的子信号,它们继承父信号的参数,并且可以触发依赖于父信号的转换(如图6-1所示). 图6-1 信号的等级组织2. 调用事件 调用事件是一个对象对调用的接收,这个对象用状态的转换而不是用固定的处理过程实现操作.对调用者来说,普通的调用(用方法实现的调用)不会被调用事件所辨别.接收者不是用方法来实现操作就是触发一个状态转换来实现这个操作.操作的参数即事件的参数.... 下一页