軟體開發的關鍵在於應用抽象的概念。方法抽象是通過將方法的使用和它的實現分離來實現的。
使用者在不知道方法是如何實現的情況下,就可以使用方法。
方法的實現細節封裝在方法內,對使用該方法的使用者來說是隱藏的。這就被稱為資訊隱藏或者個封裝。
如果決定改變方法的實現,但只要不改變方法簽名,使用者的程式就不會受到影響。
方法的實現對使用者隱藏在「黑匣子」中
我們前面編寫過一些方法,也使用過一些方法。
我們知道,作為方法的使用者,並不需要知道它們是如何實現的。
方法抽象的概念可以應用於程式的開發過程中。
當編寫乙個大程式時,可以使用「分治」策略,也成為逐步求精,將大問題分解成為子問題。
子問題又分解成更小、更容易處理的問題。
例如,想要編寫方法實現如下圖的輸入年月,得到月份日曆表的程式:
1、分治策略的首先是分析需求,將需求拆分成各個部分1)、接受輸入
public int readinput()
2)列印月曆
public void printmonth(int date)
1))、列印月份頭
public void printhead(int date)
2))、列印月份體
public void printbody(int date)
簡單的方法拆分之後,我們先完成部分的**編寫
public static void main(string args)public void printmonthdate()
private void printdate(int date)
private void printhead(int date)
private string transfermonth(int month)
} private void printbody(int date)
private int readinput()
我們發現,列印月份體**比較複雜,因此我們先只寫了乙個空的方法宣告,將其他**部分完成並簡單測試,為了不影響程式效果,可以將方法體置空,或者方法體內模擬資料執行。現在再來分析列印方法體:
1、列印空格
public void printspace(int week)
2、列印數字
public void printdaynumber(int week, int monthday)
列印空格和列印數字需要兩個資料:
1、當月第一天是星期幾
getfirstdayweek(int year, int month)
2、本月有多少天
getmonthdaycount(int month)
對應編寫方法與測試:
private void printbody(int date)private void printspace(int week)
} private void printdaynumber(int week, int monthday){
int daystart = 1;
while(daystart分治策略,指的就是將問題拆分成為多個子問題,然後挑簡單的先完成,這樣,就不會出現問題太過複雜而難以下手的情況了。
分治策略 求解遞迴式的方法
分解 將原問題劃分成形式相同的子問題,規模可以不等,對半或2 3對1 3的劃分。解決 對於子問題的解決,很明顯,採用的是遞迴求解的方式,如果子問題足夠小了,就停止遞迴,直接求解。合併 將子問題的解合併成原問題的解。這裡引出了乙個如何求解子問題的問題,顯然是採用遞迴呼叫棧的方式。因此,遞迴式與分治法是...
簡單的分治策略
簡單的分治策略 分治,是程式設計中常用的一種策略,例如在歸併排序中就有使用。分治策略是一種遞迴求解問題的方法,在每層的遞迴中可分為三個步驟 分解 divide 解決 conquer 合併 combine 分解 divide 指的是將問題劃分為一些子問題,子問題與原問題具有相同的形式,但規模較之更小。...
關於分治法的時間複雜度
分治法類似於二叉樹法,將乙個大問題,分成兩個小問題解決。由於子問題與母問題有相同的屬性,也就是一類問題,分步解決問題。這裡用歸併排序舉例。如果不用分治法,a1與a2到an每個數比較,進行n 1次,a2進行n 2次,總次數為 n 1 1 n 1 n 2 n一般排序為o n 2 時間複雜度較高。採用分治...