Java實驗報告(實驗二)


課程:Java程序設計          班級: 1351         

姓名:王瑋怡                學號:20135116

成績:             指導教師:婁嘉鵬       實驗日期:2015.05.06

實驗密級:         預習程度:             實驗時間:14:00~20:00

儀器組次:        必修/選修:選修       實驗序號:2

實驗名稱:Java面向對象程序設計                                                          

實驗目的與要求:

1.沒有Linux基礎的同學建議先學習《Linux基礎入門(新版)》《Vim編輯器》 課程

2.完成實驗、撰寫實驗報告,實驗報告以博客方式發表在博客園,注意實驗報告重點是運行結果,遇到的問題(工具查找,安裝,使用,程序的編輯,調試,運行等)、解決辦法(空洞的方法如“查網絡”、“問同學”、“看書”等一律得0分)以及分析(從中可以得到什么啟示,有什么收獲,教訓等)。報告可以參考范飛龍老師的指導

3. 嚴禁抄襲,有該行為者實驗成績歸零,並附加其他懲罰措施。

4. 請大家先在實驗樓中的~/Code目錄中用自己的學號建立一個目錄,代碼和UML圖要放到這個目錄中,截圖中沒有學號的會要求重做,然后跟着下面的步驟練習。                                                      

                                                                       

實驗儀器:

名稱

型號

數量

PC

 

1

虛擬機

實驗樓

1

一、實驗內容:

1. 初步掌握單元測試和TDD

2. 理解並掌握面向對象三要素:封裝、繼承、多態

3. 初步掌握UML建模

4. 熟悉S.O.L.I.D原則

5. 了解設計模式

 

二、實驗過程:

(一)單元測試

1.以“百分制轉五分制”為例,介紹三種代碼

(1)偽代碼  (2)產品代碼  (3)測試代碼

a.首先在虛擬機中建立一個以自己學號命名的文件夾,以存放自己實驗中的代碼、運行結果以及截圖

 

2.按照實驗說明里的要求,將代碼輸入,並運行出結果:

 

做以上內容時,沒有想到可以用學號命名。由於網絡信號不穩定,退出了實驗,以下內容為再次進入實驗樓后所做。

 

(2)TDD(Test Driven Devlopment, 測試驅動開發)

TDD的一般步驟如下:

  • 明確當前要完成的功能,記錄成一個測試列表
  • 快速完成編寫針對此功能的測試用例
  • 測試代碼編譯不通過(沒產品代碼呢)
  • 編寫產品代碼
  • 測試通過
  • 對代碼進行重構,並保證測試通過(重構下次實驗練習)
  • 循環完成所有功能的開發

關於測試工具的使用:

打開Eclipse,單擊File->New->Java Project新建一個TDDDemo的Java項目;

在TDDDemo項目中,把鼠標放到項目名TDDDemo上,單擊右鍵,在彈出的菜單中選定New->Source Folder新建一個測試目錄test;

把鼠標放到test目錄上,單擊右鍵,在彈出的菜單中選定New->JUnit Test Case新建一個測試用例類MyUtilTest;

由此,根據給出的實驗代碼輸入,得出實驗結果:

 

(二)面向對象三要素

(1)抽象 (2)封裝、繼承、多態

用UML中的類圖來描述類Dog,首先在實驗樓的環境中打開shell,在命令行中輸入umbrello,打開UML建模軟件umbrello;

先單擊工具欄上的類圖標,再在class diagram(類圖)中單擊一下,會彈出一個聖誕框,輸入類名Dog;

把鼠標放到Dog類上,單擊右鍵,選擇Properties,在彈出的對話框中的Display中去掉Public Only選項;

把鼠標放到Dog類上,單擊右鍵,選擇New->Attribute,在彈出的對話框中的填好Type,Name,並選好Visibility;

把鼠標放到Dog類上,單擊右鍵,選擇New->Operation,在彈出的對話框中的填好Type,Name,並選好Visibility。

在UML 里,一個類的屬性能顯示它的名字,類型,初始化值,屬性也可以顯示private,public,protected。 類的方法能顯示它們的方法名,參數,返回類型,以及方法的private,public,protected屬性。其中:

  • +表示public
  • #表示 protected
  • -表示 private

操作結果如下:

 

(三)設計模式初步

(1)S.O.L.I.D原則

面向對象三要素是“封裝、繼承、多態”,任何面向對象編程語言都會在語法上支持這三要素。如何借助抽象思維用好三要素特別是多態還是非常困難的,S.O.L.I.D類設計原則是一個很好的指導:

  • SRP(Single Responsibility Principle,單一職責原則)
  • OCP(Open-Closed Principle,開放-封閉原則)
  • LSP(Liskov Substitusion Principle,Liskov替換原則)
  • ISP(Interface Segregation Principle,接口分離原則)
  • DIP(Dependency Inversion Principle,依賴倒置原則)

OCP是OOD中最重要的一個原則,OCP的內容是:

  • software entities (class, modules, function, etc.) should open for extension,but closed for modification.
  • 軟件實體(類,模塊,函數等)應該對擴充開放,對修改封閉。

三、遇到的問題及解決方法

出現的問題:在單元測試的編寫中,由於網絡信號不穩定,經常出現斷網、卡機等問題,只能等待網絡恢復,或者重新開啟虛擬機重新進行實驗,因此也耽誤了很多時間

另外一大問題就是,測試代碼的編寫過程中因為不太熟悉程序的編寫,最后是自己對照着產品代碼來寫的測試代碼,所以測試代碼出現了很多問題,花費了很多時間去修改。有的編寫代碼最終還是無法順利運行。

四、實驗收獲

  這次實驗盡管花了很多時間,但是我也收獲了很多。首先,通過這次實驗,我對虛擬機的使用更加熟悉,也更加適應這種實驗模式。單元測試也幫助我提升了自己的能力,一步一步地引導我學會處理可能出現的種種問題,同時也教會我以后在編寫程序的時候要考慮到各種可能性,以提高代碼的安全性。

  通過這次實驗,我還接觸到了很多以前沒有聽說過的知識,例如TDD,雖然陌生,處理起來比較吃力,但對我來說還是比較開眼界的。我覺得通過每一次的java實驗,不僅提高了我的學習能力,更培養了持之以恆的意識,雖然有些困難,仍然盡力去做,可能最后還是沒有結果,但是也會去努力一下。

五、練習題

//偽代碼
//復數類
類有虛部實部
復數的加法運算
復數的減法運算
復數的乘法運算
復數的除法運算

 

//產品代碼
public class ComplexDemo {
// main方法
public static void main(String[] a) {
Complex b = new Complex(2, 5);
Complex c = new Complex(3, -4);
System.out.println(b + "+" + c + "=" + b.add(c));
System.out.println(b + "-" + c + "=" + b.minus(c));
System.out.println(b + "*" + c + "=" + b.multiply(c));
System.out.println(b + "/" + c + "=" + b.divide(c));
}
}

// Complex類
class Complex {
private double m;// 實部
private double n;// 虛部

public Complex(double m, double n) {
this.m = m;
this.n = n;
}

// add
public Complex add(Complex c) {
return new Complex(m + c.m, n + c.n);
}

// minus
public Complex minus(Complex c) {
return new Complex(m - c.m, n - c.n);
}

// multiply
public Complex multiply(Complex c) {
return new Complex(m * c.m - n * c.n, m * c.n + n * c.m);
}

// divide
public Complex divide(Complex c) {
double d = Math.sqrt(c.m * c.m) + Math.sqrt(c.n * c.n);
return new Complex((m * c.m + n * c.n) / d, Math.round((m * c.n - n * c.m) / d));
}

public String toString() {
String rtr_str = "";
if (n > 0)
rtr_str = "(" + m + "+" + n + "i" + ")";
if (n == 0)
rtr_str = "(" + m + ")";
if (n < 0)
rtr_str = "(" + m + n + "i" + ")";
return rtr_str;
}
}
//測試代碼

public static ComplexTest{
public static void main(String[] args){
class Complex {

private double m;// 實部
private double n;// 虛部

public Complex(double m, double n) {
this.m = m;
this.n = n;
}

public String toString() {
String rtr_str = "";
if (n > 0)
rtr_str = "(" + m + "+" + n + "i" + ")";
if (n == 0)
rtr_str = "(" + m + ")";
if (n < 0)
rtr_str = "(" + m + n + "i" + ")";
return rtr_str;
  }

}

}

}

 

六、時間統計

步驟

耗時

百分比

需求分析

 1h

 16.7%

設計

 1h  16.7%

代碼實現

 2h  33.2%

測試

 1h  16.7%

分析總結

 1h  16.7%


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM