標籤:
北京電子科技學院(BESTI)
實 驗 報 告
課程:Java程式設計 班級:1352
姓名:(按貢獻大小排名)閆佳歆
學號:(按貢獻大小排名)20135202
成績: 指導教師:婁佳鵬 實驗日期:2015.5.8
實驗密級: 預習程度: 實驗時間:15:30-18:00
儀器組次: 必修/選修:必修 實驗序號:2
實驗名稱:Java物件導向程式設計
實驗目的與要求:
實驗內容
1. 初步掌握單元測試和TDD
2. 理解並掌握物件導向三要素:封裝、繼承、多態
3. 初步掌握UML建模
4. 熟悉S.O.L.I.D原則
5. 瞭解設計模式
實驗要求
1.沒有Linux基礎的同學建議先學習《Linux基礎入門(新版)》《Vim編輯器》課程
2.完成實驗、撰寫實驗報告,實驗報告以部落格方式發表在部落格園,注意實驗報告重點是運行結果,遇到的問題(工具尋找,安裝,使用,程式的編輯,調試,運行等)、解決辦法(空洞的方法如“查網路”、“問同學”、“看書”等一律得0分)以及分析(從中可以得到什麼啟示,有什麼收穫,教訓等)。報告可以參考範飛龍老師的指導
3. 嚴禁抄襲,有該行為者實驗成績歸零,並附加其他懲罰措施。
4. 請大家先在實驗樓中的~/Code目錄中用自己的學號建立一個目錄,代碼和UML圖要放到這個目錄中,中沒有學號的會要求重做,然後跟著下面的步驟練習。
【實驗儀器】
名稱 |
型號 |
數量 |
PC |
TOSHIBA |
1 |
虛擬機器 |
實驗樓 |
1 |
【實驗內容】
(一)單元測試
(1) 三種代碼
(2) TDD(Test Driven Devlopment, 測試驅動開發)
(二)物件導向三要素
(1)抽象
(2)封裝、繼承與多態
(三)設計模式初步
(1)S.O.L.I.D原則
(2)模式與設計模式
(3)設計模式實樣本
(四)練習
1使用TDD的方式設計關實現複數類Complex。
2.實驗報告中統計自己的PSP(Personal Software Process)時間
3. 實現要有虛擬碼,產品代碼,測試代碼。
【實驗步驟】
1.以學號為名稱建立檔案夾
實驗一:
(1)單元測試
這是在我電腦裡的檔案
測試代碼:
更多的測試代碼:
測試出錯情況:
(2)TDD測試方法:
建立一個源檔案
建立測試檔案
測試案例
實現代碼:
測試回合:
錯誤:
進行改正
成功:
需要改這個條件:
然後就通過了:
實驗二:
開啟umbrello
建立一個類
儲存到指定檔案夾
繼承:
對應代碼:
實驗三:
對應代碼:
四,練習:
1.虛擬碼:
虛擬碼:
Complex類要輸出實部,輸出虛部,並按照a+bi的形式輸出複數。
Complex類中有兩個變數,實部RealPart和虛部ImaginePart;
方法:
getRealPart(int RealPart);返回實部
getImaginePart(int ImaginePart);返回虛部
toString(int RealPart,int ImaginePart);將複數輸出成a+bi的格式。
2.測試代碼:
import org.junit.Test;
import junit.framework.TestCase;
public class MyComplexTest extends TestCase {
@Test
public void testRealPart() {
assertEquals(1, MyComplex.getRealPart(1));
assertEquals(-1, MyComplex.getRealPart(-1));
assertEquals(5, MyComplex.getRealPart(5));
assertEquals(22, MyComplex.getRealPart(22));
assertEquals(-100, MyComplex.getRealPart(-100));
assertEquals(0, MyComplex.getRealPart(0));
}
@Test
public void testImaginePart(){
assertEquals(1, MyComplex.getImaginePart(1));
assertEquals(-1, MyComplex.getImaginePart(-1));
assertEquals(5, MyComplex.getImaginePart(5));
assertEquals(22, MyComplex.getImaginePart(22));
assertEquals(-100, MyComplex.getImaginePart(-100));
assertEquals(0, MyComplex.getImaginePart(0));
}
@Test
public void testtoString(){
assertEquals("1+2i", MyComplex.toString(1,2));
assertEquals("1-4i", MyComplex.toString(1,-4));
assertEquals("19", MyComplex.toString(19,0));
assertEquals("-3i", MyComplex.toString(0,-3));
assertEquals("0", MyComplex.toString(0,0));
}
}
3.產品代碼:
public class MyComplex {
static int r;
static int i;
public static int getRealPart(int RealPart){
r = RealPart;
return r;
}
public static int getImaginePart(int ImaginePart){
i = ImaginePart;
return i;
}
public static String toString (int RealPart,int ImaginePart){
if(RealPart==0 && ImaginePart==0)
return "0";
else if(RealPart == 0)
return ImaginePart+"i";
else if(ImaginePart == 0)
return RealPart+"";
else
{
if(ImaginePart>0)
return RealPart+"+"+ImaginePart+"i";
else if(ImaginePart<0)
return RealPart+""+ImaginePart+"i";
}
return "Wrong!";
}
}
【實驗體會】
這次實驗中對我來說比較困難的是在最後的Complex類的實現上,一開始是不知道Complex需要實現什麼方法,然後是對TDD的方法不是很熟悉,也不知道需要測試什麼。所以一開始我是比對著之前的例子一點點改測試執行個體,又針對測試去寫原始碼。
寫原始碼的過程中出現的問題主要有,輸出複數的時候,如果係數是1要省略,如果實部或者虛部是0要省略,如果虛部是負數需要把加號改成減號,這一堆if-else的累加花費了我不少時間。
在把這裡調通之後,另一個難題在靜態,因為我在方法中錯誤的使用了this關鍵字,導致方法不能靜態,導致測試執行個體中不能調用非靜態方法而出現錯誤。後來我發現根本就不需要this,直接做賦值返回就好,這就解決了第二個難題。
還有一個難題,就是在以a+bi的形式返回複數時,怎樣把傳回值表示為String類型,同時又能保證格式。最後我用了+這個串連符來做。
這次實驗中,我不光學習到了很多開發過程中的原則,也體會到了自己的知識掌握的並不牢靠,只是簡單的記憶,並不能活學活用,這就需要我在今後的學習生活中多加練習。
步驟 |
耗時 |
百分比 |
需求分析 |
10min |
13.3% |
設計 |
15min |
20% |
代碼實現 |
20min |
26.7% |
測試 |
20min |
26.7% |
分析總結 |
10min |
13.3% |
實驗二 Java物件導向程式設計