“重构”有没有正式的定义?

时间:2008-11-19 05:38:41

标签: refactoring theory program-transformation

任何人都知道以更正式的方式定义重构的方法吗?

更新。

  

重构是一对R =(pre; T),其中pre是前提条件   程序必须满足,T是程序转换。

4 个答案:

答案 0 :(得分:3)

这是一个有趣的问题,我没有考虑过。我做了一些谷歌搜索,并提出了关于AOP重构的paper(PDF),试图将一些数学建模应用于各方面,以表明功能方面具有与传统方面相同的灵活性但复杂性降低。我没有阅读整篇论文,但你可能会在那里找到一些东西。

另一个有趣的想法是将重构视为与编译器优化相同的重构。本质上,编译器会动态重构您的代码,尽管目标与代码级重构不同。您必须以某种方式量化代码复杂性和可读性,以合理的方式演示特定的重构如何影响它。提出模型可能是困难的部分。

我还发现这个paper建立了OO编程的代数并导出了一些基本定律,然后使用这些基本规则来推导出更复杂的重构。

有趣的东西。希望这会有所帮助。

答案 1 :(得分:2)

重构是一系列保持正确性的转换,重构可能会导致比原始代码更通用的代码

因此我们不能断言程序P上的重构转换T在重构之前和之后具有相同的属性R,但重构程序P'的属性R'应该至少等于R

given program P implies R
refactoring transformation T(P) produces P'
where (P' implies R') and (R' is equivalent to or subsumes R')

我们也可断言输入和输出保持不变或等效

但是按照你的例子,也许我们想要将重构转换T定义为4元组P,I,O,R其中P是原始程序,I是输入和/或前置条件,O是输出和/或后置条件,R是转换后的程序,然后断言(使用时间逻辑?)

P:I -> O
转化前

T(P) -> R

定义转换,

R:I -> O
变换后

我的符号数学生锈了,但那是一个大方向

这将成为一个好的硕士论文,BTW

答案 2 :(得分:2)

值得注意的是,大多数重构成对出现:

  • 添加参数 - 删除参数
  • 提取类/方法 - 内联类/方法
  • 拉起字段/方法 - 下拉字段/方法
  • 将双向关联更改为单向 - 将单向关联更改为双向
  • ...

应用对的两个重构是空变换。

对于重构对R,R':

  

R'(R(代码))=代码

答案 3 :(得分:-2)

不是直接,但就金钱而言 - 我可以说是的。我无法想出一个方程式:)

编写良好的代码,没有复杂性(可能是由于重构)可以节省时间/精力,从而节省资金。