行为子类型的模式与规则
1. 引言
在面向对象分析、设计方法以及编程语言中,继承是一项关键特性。它能让我们复用已有的类描述,并通过添加额外的属性和方法来创建新的子类。而子类型化则聚焦于探讨超类和子类之间的关系,其核心目标是明确在何种情况下子类能够替代超类。
对于具有行为语义的活动类,我们使用“行为子类型化”这一术语。目前已有众多关于行为子类型关系的提议,本文将基于三种已被证明具有可替换性的子类型关系展开研究。
我们关注的是结合了基于状态和行为方面的面向对象形式化方法所指定的类之间的子类型关系。以CSP - OZ为例,它是CSP和Object - Z的结合。CSP - OZ有两个重要特点:一是其基于状态的部分具有行为语义;二是其语义通过分别计算Object - Z和CSP部分,再通过CSP并行组合得到,这使得我们在检查子类型时可以分别考虑基于状态和行为的部分。
直接计算类的行为语义并进行比较的方法通常不可行,因此我们致力于开发简单的模式和规则,以避免显式检查并确保子类是超类的行为子类型。
2. 类的定义
我们以一个缓冲区的规范为例,使用CSP - OZ语法进行定义。这个缓冲区可以存储基本类型Element的元素,最多可存储n个元素。它有put和get两个方法,用于放入和取出元素,还有一个alive属性来表示缓冲区是否存活。
[Element]
Buffer (n : )
method put : [ el? : Element ]
method get : [ el! : Element ]
contents : fbag Elem
超级会员免费看
订阅专栏 解锁全文
6万+

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



