任何人都知道以更正式的方式定义重构的方法吗?
更新。
重构是一对R =(pre; T),其中pre是前提条件 程序必须满足,T是程序转换。
答案 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)
不是直接,但就金钱而言 - 我可以说是的。我无法想出一个方程式:)
编写良好的代码,没有复杂性(可能是由于重构)可以节省时间/精力,从而节省资金。