2008-11-19 21 views
8

任何人都知道的方式在一個更正式的方式來定義重構?「重構」有任何正式的定義嗎?

UPDATE。

重構是一對R =(pre; T)其中pre是程序必須滿足的前提條件,T是程序轉換。

+0

重新打開並upvoted - 這是一個很好的問題 – 2008-11-19 05:55:09

+0

到底是什麼進攻約這個?一個非常好的問題。 – tvanfosson 2008-11-19 05:57:45

+0

Resonable轉換包括它們自己的先決條件,所以在這個表徵中看起來多餘。 – 2009-09-04 05:15:47

回答

-2

嘛不直接,但在金錢方面 - 我能說的是。我不能拿出上:)

碼的公式寫得很好,無複雜的(可能是由於重構)可以節省時間/精力,因此錢。

3

這是一個有趣的問題,一個我沒有考慮。我做了一些谷歌搜索,並用此paper對AOP重構(PDF),試圖以某種數學模型適用於各方面,以顯示該功能方面具有相同的靈活性,因爲傳統的方面,但同時降低複雜性上來。我沒有閱讀整篇文章,但你可能會在那裏找到一些東西。

另一個有趣的想法是想沿着相同的路線編譯器優化的重構。本質上,編譯器會即時重構您的代碼,儘管目標不同於代碼級重構。您必須以某種合理的方式量化代碼複雜性和可讀性,以演示特定重構如何影響它。與模型結合可能是困難的部分。

我也發現這個paper,它建立了面向對象編程的代數並導出一些基本規則,然後使用這些基本規則來派生更復雜的重構。

有趣的東西。希望這可以幫助。

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

這可能是有趣的是,大部分的重構功能是成對出現:

  • 添加參數 - 刪除參數
  • 提取類/方法 - 在線類別/方法
  • 上拉字段/方法 - 下拉字段/方法
  • 將雙向關聯更改爲單向 - 將雙向關聯更改爲雙向
  • ...

應用這兩個對的重構是一個空轉換。

對於重構一對R,R ':

R'(R(代碼))=代碼