![](https://csdnimg.cn/release/download_crawler_static/88745227/bg3.jpg)
H.- C. Estler
等人
/
理论计算机科学电子笔记
187
(
2007
)
3
2
重构示例
重构是一种在不改变软件行为的情况下修改软件的方法。使用重构对于软件开
发人员来说是很常见的,但是重构正式的规范也很有用。下面我们给出一个
Object-Z
规范的例子,并讨论它的一些重构。
当将重构应用于规范或程序时,重构之间的结构差异可以很容易地看到。有
些重构会在内部改变方法,而不改变类的其他组件。其他重构会改变类层次结
构的一部分,而保持类在其范围之外不变。 因此,重构的分类可能会将其
范围
视为主要的区分标准。我们发现了四个重构操作的作用域
•
方法,
•
同学们,
•
类层次结构,
•
系统
然而,这种严格的分类并不能总是保持,因为可能存在应用于方法的
refac-
torings
,但仍然需要对规范的其余部分进行相应的更改(例如,重命名方
法)。因此,方法重构可以进一步分为外部重构(随之而来的是对规范其余
部分的更改这是后者,我们在本文中处理。
作为我们重构的一个运行示例,我们使用图
1
中给出的桑拿房规范。类的第一部
分是可见性列表。 这个列表声明了类的可见成员。这里列出的所有成员在类外
都是可见的(就像
Java
中的
public
),否则它们在类外是不可见的(就像
Java
中
的
private/protected
)。状态模式定义了一些变量和对变量的全局约束。在状态模
式之后,有一个初始化模式(这里是开放的,因为它对重构没有特别的重要
性)和一些操作模式。 我们有两个操作:
updateControlLights
和
热量
。 方法
updateControlLights
更新
正确温度(
clOk
)、温度过热(
clHot
)和温度过冷(
clCold
)。如果当前温
度与目标温度相差小于或等于
2
度,则认为温度正常,否则控制指示器分别
设置为
“
太热
”
或
“
太冷
”
。如果桑拿房变冷,可以通过操作
热
加热。加热也改
变了
当前湿度
。
看看
Sauna
类,我们发现有些方法定义(特别是
updateControlLights
)不容易
理解 。 接下 来 我们 将 根据 一 些重 构 规则 来 改 变它 们 。在 这 里, 我 们对
updateControlLights
应用三种重构,对
heat
应用
一种重构。重构的名称是根据
Fowler
书中的命名来选择的