文件名称:转换到历史状态-《中国2060年前碳中和研究报告》
文件大小:4.49MB
文件格式:PDF
更新时间:2024-06-28 01:03:11
UML 状态图 实用C设计 实用C++设计 中文全文
5.5 转换到历史状态
5.5.1 目的
从某个组合状态转换出来,但是记住最近的活动子状态,这样在后面你可以返回这个子状态。
5.5.2 问题
在高层组合状态定义的状态转换常常处理那些需要立即关注的事件,然而,在处理完它们后,系统必须
返回给定组合状态的最近的子状态。
例如,考虑一个简单的烤面包炉。通常烤面包炉在它的门被关上时操作。然而,在任何时候,用
户可以打开们去检查食物或者清理炉子。打开炉门是一个中断,为了安全原因,需要关闭加热器并打开
一个内部的炉灯。然而,关闭炉门后,烤面包炉应该恢复去做在门被打开前的事情。这样有一个问题。
在们被打开前烤面包炉在做什么?状态机必须记住在开门前最近的活动状态配置,在炉门被关闭后可以
恢复它。
UML 状态图使用 2 类历史伪装态处理这种情况:浅历史和深历史(见第二章 2.3.12 节)。这
个烤面包炉例子需要深历史机制(标记为图 5.11 里的带有圆圈的 H* )。 QEP事件处理器不自动的
支持所有状态的历史机制,因为它将导致额外的内存和性能成本。然而,为挑选的状态增加这类支持是
很容易的。
5.5.3 解决方法
图 5.11 展示了这个解决方法,它把 doorClosed 状态最近的活动叶子状态存储在一个专用的数据成员
doorClosed_history 里(在图 5.11 里缩写为 history )。然后, doorOpen状态的转换到历史(转换到带
圆圈的 H* )使用这个属性作为这个转换的目标。
图 32转换到历史状态模式
5.5.4 实例代码
转换到历史状态模式的实例代码在目录