活动介绍

对象导向精化:原理、规则与应用

立即解锁
发布时间: 2025-08-25 01:51:58 阅读量: 1 订阅数: 10
### 对象导向精化:原理、规则与应用 #### 1. 对象系统精化 在对象导向编程中,理解两个对象程序之间的精化关系至关重要。我们定义,若两个对象程序 $S_i = Cdeclsi • Maini$($i = 1, 2$)具有相同的外部变量集 $extvar$,且满足 $\forall extvar, extvar′, ok, ok′ · ([[S1]] ⇒[[S2]])$,则称 $S1$ 是 $S2$ 的精化,记为 $S1 ⊒sys S2$。 以下通过示例说明: - **示例 14.3**: - 对于任意类声明 $Cdecls$,$S1 = Cdecls • ({x : C}, C.new(x))$ 和 $S2 = Cdecls • ({x : C}, C.new(x); C.new(x))$ 是等价的。 - 假设类 $C \in pubcname$,$\langle a:Int, d\rangle\in attr(C)$,在 $op(C)$ 中有 $get(\emptyset; Int z; \emptyset)\{z := a\}$ 和 $update()\{a := a + c\}$,则 $Cdecls • ({x : C, y : Int}, C.new(x); x.update(); x.get(y))$ 和 $Cdecls • ({x : C, y : Int}, C.new(x); x.update(); x.get(y); C.new(x))$ 是等价的。 下面给出第二个示例的证明: 设第一个程序为 $S1$,第二个为 $S2$,假设声明部分定义良好。计算 $S1$ 的语义: \[ \begin{align*} [[C.new(x); x.update(), x.get(y)]] &= true \vdash\exists r \in REF · (\Pi′ = \{\langle r, C, \sigma0\rangle\} \land x′ = \langle r, C\rangle); [[x.update(); x.get(y)]]\\ &= \left( \begin{array}{l} true \vdash\exists r \in REF · (\Pi′ = \{\langle r, C, \sigma0\rangle\} \land x′ = \langle r, C\rangle)\\ \land self′ =< > \land \Pi′ = \{\langle r, C, \sigma0 \oplus\{a \mapsto d + c\}\rangle| r = ref(x)\}; [[x.get(y)]] \end{array} \right)\\ &= \left( \begin{array}{l} true \vdash\exists r \in REF · (\Pi′ = \{\langle r, C, \sigma0 \oplus\{a \mapsto d + c\}\rangle\} \land x′ = \langle r, C\rangle)\\ \land self′ =< >); [[x.get(y)]] \end{array} \right)\\ &= \left( \begin{array}{l} true \vdash\exists r \in REF · (\Pi′ = \{\langle r, C, \sigma0 \oplus\{a \mapsto d + c\}\rangle\} \land x′ = \langle r, C\rangle)\\ \land self′ =< >); true \vdash self′ =< > \land z′ =< > \land y′ = d + c\\ \land visibleattr′ = \{M.a | M \in pubname \land a \in pub(M)\} \end{array} \right)\\ &= \left( \begin{array}{l} true \vdash\exists r \in REF · (\Pi′ = \{\langle r, C, \sigma0 \oplus\{a \mapsto d + c\}\rangle\} \land x′ = \langle r, C\rangle)\\ \land self′ =< > \land z′ =< > \land y′ = c + d\\ \land visibleattr′ = \{M.a | M \in pubname \land a \in pub(M)\} \end{array} \right) \end{align*} \] 语义 $[[S1]]$ 通过存在量词隐藏 $\Omega, \Pi, self$ 和 $z$。设 $[[Cdecls]]$ 为 $true \vdash\Omega = \emptyset\land\Omega′ = \Omega0$,则 $[[S1]]$ 等于 $true \vdash\exists r \in REF · x′ = \langle r, C\rangle\land y′ = c + d$。 $S2$ 的主方法是 $S1$ 的主方法后接命令 $C.new(x)$,其语义为: \[ \begin{align*} [[C.new(x); x.update(), x.get(y)]]; [[C.new(x)]] &= \left( \begin{array}{l} true \vdash\exists r \in REF · (\Pi′ = \{\langle r, C, \sigma0 \oplus\{a \mapsto d + c\}\rangle \land x′ = \langle r, C\rangle)\\ \land self′ =< > \land z′ =< > \land y′ = c + d\\ \land visibleattr′ = \{M.a | M \in pubname \land a \in pub(M)\};\\ true \vdash\exists p \notin ref(\Pi) · \Pi′ = \Pi \cup\{\langle p, C, \sigma0\rangle\} \land (x′ = \langle p, C\rangle) \end{array} \right)\\ &= \left( \begin{array}{l} true \vdash\exists r, p \in REF · ((p \neq r) \land \Pi′ = \{\langle p, C, \sigma0\rangle, \langle r, C, \sigma0 \oplus\{a \mapsto d + c\}\rangle\}\\ \land x′ = \langle p, C\rangle) \land self′ =< > \land z′ =< > \land y′ = c + d\\ \land visibleattr′ = \{M.a | M \in pubname \land a \in pub(M)\} \end{array} \right) \end{align*} \] 隐藏内部变量后,$[[S2]]$ 简化为 $true \vdash\exists p \in REF · x′ = (p, C) \land y′ = c + d$。因此,$S1$ 和 $S2$ 相互精化。 但需注意,程序 $S1; x.get(y)$ 与 $S2; x.get(y)$ 不等价。第一个程序中 $y$ 的最终值仍为 $d + c$,而第二个程序中 $y$ 的最终值为 $d$。从白盒语义角度看,$S1$ 和 $S2$ 原本就不等价。 这个示例表明程序精化是非组合性的。给定两个主方法 $Maini = (extvar, ci)$($i = 1, 2$),若 $Cdecls1 • Main1 \geq_{sys} Cdecls2 • Main2$,并不一定有 $Cdecls • (extvar, c1; c) \geq_{sys} Cdecls • (extvar, c2; c)$。非组合性是由于语义中隐藏了全局内部变量 $\Pi$ 导致的。不过,若使用白盒语义定义精化关系,当 $s$ 仅涉及对附加到外部变量的对象方法的调用时,上述非组合性将消失。因此,白盒精化是黑盒语义精化的子关系,且更具组合性。 还有一个定理:设 $Cdecls • Main$,$C$ 是 $Cdecls$ 中声明的公共类,$Cdecls1$ 是将 $C$ 改为私有类后从 $Cdecls$ 得到的。若 $Main$ 中未引用 $C$,则 $Cdecls • Main =_{sys} Cdecls1 • Main$,其中 $=_{sys}$ 是等价关系 $\geq_{sys} \cap\leq_{sys}$,且关系 $\geq_{sys}$ 是自反和传递的。 #### 2. 结构精化 示例 14.3 的证明表明,程序的局部变量和可见属性在每次方法调用后是常量。当程序中的主方法在语法上相同时,它们的系统状态之间的关系由这些程序的结构关系决定,即类名、属性、子类 - 超类关系以及类中的方法。 对象导向程序设计主要围绕类及其方法的设计。类声明部分实际上可以支持许多不同的应用主程序。下面重点介绍结构精化。 **定义 14.10**:设 $Cdecls1$ 和 $Cdecls2$ 是两个声明部分。若 $Cdecls1$ 能在任何对象系统中替换 $Cdecls2$,则称 $Cdecls1$ 是 $Cdecls2$ 的精化,记为 $Cdecls1 \geq_{class} Cdecls2$,即 $Cdecls1 \geq_{class} Cdecls2 \stackrel{def}{=} \forall Main · (Cdecls1 • Main \geq_{sys} Cdecls2 • Main)$。 非正式地说,$Cdecls1$ 至少支持与 $Cdecls2$ 相同数量的服务。显然,$\geq_{class}$ 是自反和传递的。我们用 $=_{class}$ 表示等价关系 $\geq_{class} \cap\leq_{class}$,在不引起混淆时省略下标。 结构精化不改变主方法。$Cdecls2$ 中的每个公共类都必须在精化后的声明部分 $Cdecls1$ 中声明,并且 $Cdecls2$ 中公共类的每个方法签名都必须在 $Cdecls1$ 中声明。 **定义 14.11**:对于 $i = 1, 2$,设 $Cdeclsi$ 是两个类声明部分。从 $Cdecls1$ 到 $Cdecls2$ 的结构转换是 $Cdecls1$ 的对象空间 $\tau_1$ 和 $Cdecls2$ 的对象空间 $\tau_2$ 之间的关系,可以表示为一个设计 $true \vdash\rho(\Omega1, \Omega′_2
corwn 最低0.47元/天 解锁专栏
赠100次下载
继续阅读 点击查看下一篇
profit 400次 会员资源下载次数
profit 300万+ 优质博客文章
profit 1000万+ 优质下载资源
profit 1000万+ 优质文库回答
复制全文

相关推荐

SW_孙维

开发技术专家
知名科技公司工程师,开发技术领域拥有丰富的工作经验和专业知识。曾负责设计和开发多个复杂的软件系统,涉及到大规模数据处理、分布式系统和高性能计算等方面。
最低0.47元/天 解锁专栏
赠100次下载
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
千万级 优质文库回答免费看
立即解锁

专栏目录

最新推荐

【高级图像识别技术】:PyTorch深度剖析,实现复杂分类

![【高级图像识别技术】:PyTorch深度剖析,实现复杂分类](https://www.pinecone.io/_next/image/?url=https%3A%2F%2Fsiteproxy.ruqli.workers.dev%3A443%2Fhttps%2Fcdn.sanity.io%2Fimages%2Fvr8gru94%2Fproduction%2Fa547acaadb482f996d00a7ecb9c4169c38c8d3e5-1000x563.png&w=2048&q=75) # 摘要 随着深度学习技术的快速发展,PyTorch已成为图像识别领域的热门框架之一。本文首先介绍了PyTorch的基本概念及其在图像识别中的应用基础,进而深入探讨了PyTorch的深度学习

未知源区域检测与子扩散过程可扩展性研究

### 未知源区域检测与子扩散过程可扩展性研究 #### 1. 未知源区域检测 在未知源区域检测中,有如下关键公式: \((\Lambda_{\omega}S)(t) = \sum_{m,n = 1}^{\infty} \int_{t}^{b} \int_{0}^{r} \frac{E_{\alpha,\alpha}(\lambda_{mn}(r - t)^{\alpha})}{(r - t)^{1 - \alpha}} \frac{E_{\alpha,\alpha}(\lambda_{mn}(r - \tau)^{\alpha})}{(r - \tau)^{1 - \alpha}} g(\

分布式应用消息监控系统详解

### 分布式应用消息监控系统详解 #### 1. 服务器端ASP页面:viewAllMessages.asp viewAllMessages.asp是服务器端的ASP页面,由客户端的tester.asp页面调用。该页面的主要功能是将消息池的当前状态以XML文档的形式显示出来。其代码如下: ```asp <?xml version="1.0" ?> <% If IsObject(Application("objMonitor")) Then Response.Write cstr(Application("objMonitor").xmlDoc.xml) Else Respo

分布式系统中的共识变体技术解析

### 分布式系统中的共识变体技术解析 在分布式系统里,确保数据的一致性和事务的正确执行是至关重要的。本文将深入探讨非阻塞原子提交(Nonblocking Atomic Commit,NBAC)、组成员管理(Group Membership)以及视图同步通信(View - Synchronous Communication)这几种共识变体技术,详细介绍它们的原理、算法和特性。 #### 1. 非阻塞原子提交(NBAC) 非阻塞原子提交抽象用于可靠地解决事务结果的一致性问题。每个代表数据管理器的进程需要就事务的结果达成一致,结果要么是提交(COMMIT)事务,要么是中止(ABORT)事务。

【PJSIP高效调试技巧】:用Qt Creator诊断网络电话问题的终极指南

![【PJSIP高效调试技巧】:用Qt Creator诊断网络电话问题的终极指南](https://www.contus.com/blog/wp-content/uploads/2021/12/SIP-Protocol-1024x577.png) # 摘要 PJSIP 是一个用于网络电话和VoIP的开源库,它提供了一个全面的SIP协议的实现。本文首先介绍了PJSIP与网络电话的基础知识,并阐述了调试前所需的理论准备,包括PJSIP架构、网络电话故障类型及调试环境搭建。随后,文章深入探讨了在Qt Creator中进行PJSIP调试的实践,涵盖日志分析、调试工具使用以及调试技巧和故障排除。此外,

以客户为导向的离岸团队项目管理与敏捷转型

### 以客户为导向的离岸团队项目管理与敏捷转型 在项目开发过程中,离岸团队与客户团队的有效协作至关重要。从项目启动到进行,再到后期收尾,每个阶段都有其独特的挑战和应对策略。同时,帮助客户团队向敏捷开发转型也是许多项目中的重要任务。 #### 1. 项目启动阶段 在开发的早期阶段,离岸团队应与客户团队密切合作,制定一些指导规则,以促进各方未来的合作。此外,离岸团队还应与客户建立良好的关系,赢得他们的信任。这是一个奠定基础、确定方向和明确责任的过程。 - **确定需求范围**:这是项目启动阶段的首要任务。业务分析师必须与客户的业务人员保持密切沟通。在早期,应分解产品功能,将每个功能点逐层分

C#并发编程:加速变色球游戏数据处理的秘诀

![并发编程](https://img-blog.csdnimg.cn/1508e1234f984fbca8c6220e8f4bd37b.png) # 摘要 本文旨在深入探讨C#并发编程的各个方面,从基础到高级技术,包括线程管理、同步机制、并发集合、原子操作以及异步编程模式等。首先介绍了C#并发编程的基础知识和线程管理的基本概念,然后重点探讨了同步原语和锁机制,例如Monitor类和Mutex与Semaphore的使用。接着,详细分析了并发集合与原子操作,以及它们在并发环境下的线程安全问题和CAS机制的应用。通过变色球游戏案例,本文展示了并发编程在实际游戏数据处理中的应用和优化策略,并讨论了

深度学习 vs 传统机器学习:在滑坡预测中的对比分析

![基于 python 的滑坡地质灾害危险性预测毕业设计机器学习数据分析决策树【源代码+演示视频+数据集】](https://opengraph.githubassets.com/f6155d445d6ffe6cd127396ce65d575dc6c5cf82b0d04da2a835653a6cec1ff4/setulparmar/Landslide-Detection-and-Prediction) 参考资源链接:[Python实现滑坡灾害预测:机器学习数据分析与决策树建模](https://wenku.csdn.net/doc/3bm4x6ivu6?spm=1055.2635.3001.

多项式相关定理的推广与算法研究

### 多项式相关定理的推广与算法研究 #### 1. 定理中 $P_j$ 顺序的优化 在相关定理里,$P_j$ 的顺序是任意的。为了使得到的边界最小,需要找出最优顺序。这个最优顺序是按照 $\sum_{i} \mu_i\alpha_{ij}$ 的值对 $P_j$ 进行排序。 设 $s_j = \sum_{i=1}^{m} \mu_i\alpha_{ij} + \sum_{i=1}^{m} (d_i - \mu_i) \left(\frac{k + 1 - j}{2}\right)$ ,定理表明 $\mu f(\xi) \leq \max_j(s_j)$ 。其中,$\sum_{i}(d_i

嵌入式平台架构与安全:物联网时代的探索

# 嵌入式平台架构与安全:物联网时代的探索 ## 1. 物联网的魅力与挑战 物联网(IoT)的出现,让我们的生活发生了翻天覆地的变化。借助包含所有物联网数据的云平台,我们在驾车途中就能连接家中的冰箱,随心所欲地查看和设置温度。在这个过程中,嵌入式设备以及它们通过互联网云的连接方式发挥着不同的作用。 ### 1.1 物联网架构的基本特征 - **设备的自主功能**:物联网中的设备(事物)具备自主功能,这与我们之前描述的嵌入式系统特性相同。即使不在物联网环境中,这些设备也能正常运行。 - **连接性**:设备在遵循隐私和安全规范的前提下,与同类设备进行通信并共享适当的数据。 - **分析与决策