助教 什麼是封裝

2022-09-14 11:15:13 字數 2752 閱讀 6076

第一階段目標

能把計算的功能封裝起來,通過測試程式和api 介面測試其簡單的加法功能。

import j**a.util.scanner;

public class calculator else

}}

這個程式很簡單:輸入兩個運算元,輸入乙個操作符(目前支援加法),輸出結果。

但是,面對這樣的程式,我們可能會遇到以下問題:

1.如何做測試?

2.假如老(客)師(戶)"得寸進尺"地提出要擴充套件一下,比如說我不僅要加法,還要支援兩個數的減法,乘法,除法,你該怎麼做?

3.如何測試擴充套件完以後的程式?

對於第乙個問題,大多數人可能想到的測試方法就是:執行一下這個程式,輸入幾組資料,然後看執行結果。

第二個問題,有以下兩種方法,童鞋們可以試著對比一下:

方案一:簡單粗暴main方法加if/else

import j**a.util.scanner;

public class calculator else if (cc.equals("-")) else if (cc.equals("*")) else if (cc.equals("/")) else

} else

}}

方案二: 將計算的邏輯**封裝到乙個類裡面,main方法直接呼叫就可以

calculator.j**a

import j**a.util.scanner;

public class calculator

}

core.j**a

public class core  else if (cc.equals("-"))  else if (cc.equals("*"))  else if (cc.equals("/"))  else 

} else

}}

方案二就是傳說中的封裝:

core core = new core();

core.calc(cc, a, b);

這樣有什麼好處呢?

我們看第三個問題:

如何測試擴充套件完以後的程式?

如果用方案1的話,你又要執行一下,手動輸入更多的幾組資料來看結果,可是,如果用方案二的話,我們針對計算這部分的邏輯,可以只對core這個類的calc方法做單元測試,而且對於之前做過的單元測試可以復用下來,不需要你再像方案一一樣多次執行輸入資料看結果這種費時間又可能測試情況覆蓋不全,同時,你在增加calc的功能的時候,不需要改main方法。

所以,總結一下,我認為,封裝有以下幾個好處:

1.復用之前的測試用例。

2.維護**方便。

3.擴充套件方便。

4.將邏輯**和 ui **分離,多種表現層共享同乙個業務邏輯模組。

好像我們不知不覺就把老師的第乙個要求和第二個要求完成了:

第一階段目標 - 能把計算的功能封裝起來,通過測試程式和api 介面測試其簡單的加法功能。

第二階段目標 - 通過測試程式和api 介面測試其簡單的加減乘除功能。並能看到**覆蓋率。

提示:童鞋們要做的就是把自己的之前兩次程式設計作業中的計算的邏輯,封裝到自己的core類裡面,能力強的童鞋,calc方法也可以自己設計,考慮用一些設計模式,那就更贊啦!

鄒老師提供了乙個更加好的設計方法:calc 函式接受字串的輸入,然後通過解析字串來獲得計算結果,比如:

core.calc(「1 + 1」) ;

core.calc(「3 - 1」) ;

...

此時,老(客)師(戶)提出更加「慘絕人寰」的要求:

第三階段目標 - 通過測試程式和api 介面測試對於各種引數的支援。並能看到**覆蓋率。

假如我們用了封裝,就很好擴充套件這個需求,最簡單的解決辦法,只需要在core.j**a中增加乙個過載的方法:

public class core 		

public double calc(string calstr, int precision) else if (num_scale == precision) else if (num_precision == precision)

return result;

}}

針對calc做單元測試也很方便,不會像之前一樣把所有邏輯都寫在main方法裡面導致main方法就難以維護了。

提示:對於配置這裡,鄒老師提供了更多的方式:比如,單獨增加乙個setting方法來控制不一樣的情況,或者不像我這樣用乙個int型別的數來標明,可以用乙個xml格式的值來控制不一樣的情況,同時,處理多個情況的時候,也不一定要像我這樣 else/if,試著用一點模式。

ps:做的時候,如果童鞋是傳入字串在處理,會發現很多演算法上的問題,基礎好的童鞋可以研究,暫時想不出的童鞋可以考慮先用簡單的方式處理。我大學的演算法和資料結構基礎不太好,也在刻苦補充中,對演算法有興趣的童鞋可以拿鄒老師的《程式設計之美》來看看。

老(客)師(戶)最後乙個要求是:

第四階段目標 - 通過增量修改改進程式, 完成對各種錯誤情況的處理。

對於這個問題:

參見我之前的兩篇單元測試的部落格,其中有講到異常處理的情況:

什麼是封裝資訊

簡單的說 封裝資訊就是把資料資訊包裝起來得做法 什麼是http 就是web客戶端和服務端得一種協議,嚴格得說,web就是建立在http協議上通訊的。www的意義 通訊得最初建設就是將sgml作為頁面的文字標記語言 html 文件的傳輸協議http,文件的所在位置url。現在也可以簡稱為web。什麼是...

什麼叫封裝?封裝有什麼作用

封裝是把彼此相關資料和操作包圍起來,抽象成為乙個物件,變數和函式就有了歸屬,想要訪問物件的資料只能通過已定義的介面。說封裝就是將屬性私有化,太過狹隘,因為封裝不僅僅實現了資料的保護,還把彼此相關聯的變數和函式包圍了起來。1 我們能修改自己的 而不用修改那些呼叫我們 的程式片段,從而可以讓程式碼更容易...

為什麼使用封裝類以及什麼是拆箱裝箱

為什麼要使用封裝類 八種基本資料型別,給制定的基本資料型別儲存完資料,基本資料型別不能通過方法運算元據,不是物件導向的操作方式,封裝類解決了這個問題,先把資料儲存給封裝類的物件,然後通過封裝類的物件打點呼叫方法,通過方法可以對物件中的資料做各種操作 比如 用物件導向的思維實現 integer int...