搬移「金額計算」**
接1.2,觀察amountfor()(計算金額)使用了來自rental(租賃實體)類的資訊,卻沒有使用來自customer類的資訊。
這就使我們懷疑它是否被放錯了位置。絕大多數情況下,函式應該放在它所使用的資料的所屬物件內,所以amountfor()應該從customer(顧客實體)類中移到rental(租賃實體)類去。
為了這麼做,我要運用move method(搬移函式)。首先把**複製到rental類,調整**使之適應新家,然後重新編譯。
class rental...
// 計算金額
public double getcharge()
break;
case movie.new_release:
result += get_dayrented() * 3;
break;
case movie.childrens:
result += 1.5;
if (get_dayrented() > 3)
break;
} return result;
}
在這個例子裡,「適應新家」意味著要去掉引數。此外,還要在搬移的過程中更改函式名稱。然後改變customer.amountfor()函式內容,使它委託呼叫新的函式即可:
class customer...
private double amountfor(rental arental)
然後編譯並測試,看看有沒有破壞什麼東西。
接下來找到程式中對於舊函式的引用點,並修改它們,讓它們改用新函式。
public string statement()
// 顯示憑條
result += "\t"+each.get_movie().get_title()+"\t"+string.valueof(thisamount)+"\n";
totalamount += thisamount; }
// 組裝頁尾
result += "amount owed is "+string.valueof(totalamount)+"\n";
result += "you earned "+string.valueof(frequentrenterpoints)+" frequent renter points";
return result;
}
最終的uml
至此,對於rental.getcharge()的修改暫時終止,讓我們回到customer.statement()函式。通過觀察,發現thisamount(臨時變數-某一類影片的總金額)如今變的多餘了。他接受each.getcharge()的執行結果,然後就不會再有任何改變。所以可以運用replace temp with query(以查詢取代臨時變數)把thisamount除去:
class customer...
public string statement()
// 顯示憑條
result += "\t"+each.get_movie().get_title()+"\t"+string.valueof(each.getcharge())+"\n";
totalamount += each.getcharge(); }
// 組裝頁尾
result += "amount owed is "+string.valueof(totalamount)+"\n";
result += "you earned "+string.valueof(frequentrenterpoints)+" frequent renter points";
return result;
}
修改完事,立即編譯測試,保證沒有破壞任何東西。
臨時變數往往會引發問題,他們會導致大量引數被傳來傳去,而其實完全沒有這種必要。當然除去臨時變數也會引發問題,如上述修改,會導致查詢兩次的效能問題,但這個問題可以在rental中很好的被優化,此處不做說明。
第一章課後習題1 3
1.3 只使用處理i o的printdigit方法,編寫一種方法以輸出任意double型量 可以是負值 package com.algorithm.chapterone 只使用處理i o的printdigit方法,編寫一種方法以輸出任意double型量 可以是負值 author gao rongzh...
python第一章筆記 第一章 基礎
參與除法的兩個數中有乙個數為浮點數,結果也為浮點數 如 1.0 2,1 2.0,1.0 2.0 python print 1.0 2 結果 0.5 print 1 2.0 結果 0.5 print 1.0 2.0 結果 0.5 整數 整數,計算結果的小數部分被截除,只保留整數部分 不會四捨五入 如 ...
重構第一章 重構的第乙個案例
這一章通過講解租碟的案例來初步解釋了重構的意義,有些問題何老師已經講過了,比如說變數命名,分割 等等 1.1 起點 如果你發現自己需要為程式新增乙個特性,而 結構使你無法很方便地那麼做,那就先重構那個程式,使特性的新增比較容易進行,然後再新增特性。1.2 重構的第一步 測試 每當我要進行重構的時候,...