42、规范中允许状态变化的相关研究

规范中允许状态变化的相关研究

1. 关于 ∼C 关系的问题

在规范方面,除了类 C 中的私有规范外,∼C 关系能保持正确性。公共规范通常不会引用封装状态,但私有规范和其他代码注释可能会引用。例如,即使 f 有 f (x), h → v, k 意味着 h ∼C k 的性质,也不能用相关等式来替换类 C 代码中的断言。

∼C 关系存在问题,它不是一个同余关系。例如,给类 C 添加如下方法:

public int leak() {
    return t.Count;
}

虽然由于 f 在类 C 外部观察上是纯的,有 assert f (x) ∼C skip,但 assert f (x); y := leak() ̸∼C skip; y := leak(),这表明在上下文 “−; y := leak()” 中同余性质不成立。

再看上下文 “y := f (x); −”,假设存在 h, h′,除了某个 C 对象 o 使得 h o.t 和 h′ o.t 将 x 映射到不同值外,h ≈ h′。此时 h ∼C h′,但执行 f (x) 得到的结果 v ̸∼C v ′,执行 “y := f (x)” 后的堆 k ̸∼C k ′。显然 skip ∼C skip,但将 skip 放入上下文 “y := f (x); −” 会得到 “y := f (x); skip” 不等于 “y := f (x); skip”,这也是同余关系不成立的反例。

2. 模拟关系

同余关系的第二个反例揭示了根本问题:∼C 关系定义为忽略封装字段和对象,这会使类 C

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值