面向方面编程中的状态图语义与属性分析
1. 系统状态图语义基础
在系统中,每个对象在其状态图里都有一个指定节点,该节点对应着对象的当前值。这些指定节点的叉积定义了一种映射,它能给出变量、字段、位置以及方法激活的内部栈的当前值,同时还能确定系统中每个对象当前可执行的操作。为简便起见,“变量”一词用于指代每个状态中被赋予值的所有状态组件。
系统(无论是基础系统还是添加了切面的增强系统)在执行过程中任意点的语义,被定义为上述状态图叉积扩展成的单个计算状态图。其中,节点是该点现有变量的特定值(通常称为状态),箭头则是对应系统原子操作的转换。需要注意的是,这并不排除通过添加新对象实例来扩展状态图,或者通过丢弃已完成的对象来缩小状态图的转换。继承和多态问题会使状态图的定义变得复杂,但与添加切面的问题无关。系统和语义状态图通常被组织成反应式系统,每个外部激活都会引发对应事务的有限计算。从外部激活到静止状态的图中最大状态序列被称为轨迹。尽管这种状态图可能有无限个状态(如果存在具有无限域的变量,如整数),但可以使用抽象技术创建用于模型检查的有限状态版本。
2. 切面语义作为状态图转换
切面声明及其与基础系统的绑定(称为织入)定义了基础系统中切面将被激活以及切面代码(称为通知)将被执行的连接点或事件。连接点通过切入点声明进行语法描述。从语义上讲,将切面织入系统会将原始系统的图转换为增强系统的图。因此,切面的语义被定义为状态图的转换器:给定基础系统的图,它会生成增强系统的图。需要注意的是,这种语义对于切面和织入在切面语言中的实际实现方式是中立的:内联切面代码的系统、在运行时捕获事件并转移控制的系统,以及使用其他已知实现技术的语言,都是同样有效的。
当织入一个
超级会员免费看
订阅专栏 解锁全文
11万+

被折叠的 条评论
为什么被折叠?



