20165203 實驗二 Java面向對象程序設計

20165203 實驗二 Java面向對象程序設計

1、面向對象程序設計1——單元測試和TDD

1.實驗要求html

  • 參考 (http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST) 完成單元測試的學習
  • 提交最後三個JUnit測試用例(正常狀況,錯誤狀況,邊界狀況)都經過的截圖,截圖上要有畫圖加水印,輸入本身的學號

測試要點:本提交點考查JUnit會不會使用,測試用例至少要包含正常狀況,錯誤狀況,邊界狀況的測試java

2.運行結果截圖git

3.代碼連接:
MyUtil.java
MyUtilTest.java編程

2、面向對象程序設計2——利用TDD學習研究學習StringBuffer

1.實驗要求設計模式

  • 參考 積極主動敲代碼,使用JUnit學習Java (http://www.cnblogs.com/rocedu/p/4837092.html)
    以 TDD的方式研究學習StringBuffer
  • 提交你的單元測試用例和測試經過的截圖,截圖要加上學號水印
    測試要點:測試本身會不會寫JUnit測試用例

2.實驗結果截圖
ide

3.代碼連接:
MyDoc.java函數

3、面向對象程序設計-3

1.實驗要求:
實驗二 Java面向對象程序設計(http://www.cnblogs.com/rocedu/p/4472842.html)單元測試

  • 參考http://www.cnblogs.com/rocedu/p/6736847.html
  • 對設計模式示例進行擴充,體會OCP原則和DIP原則的應用,初步理解設計模式
    用本身的學號%6進行取餘運算,根據結果進行代碼擴充
    0: 讓系統支持Byte類,並在MyDoc類中添加測試代碼代表添加正確,提交測試代碼和運行結的截圖,加上學號水印
    1: 讓系統支持Short類,並在MyDoc類中添加測試代碼代表添加正確,提交測試代碼和運行結的截圖,加上學號水印
    2: 讓系統支持Boolean類,並在MyDoc類中添加測試代碼代表添加正確,提交測試代碼和運行結的截圖,加上學號水印
    3: 讓系統支持Long類,並在MyDoc類中添加測試代碼代表添加正確,提交測試代碼和運行結的截圖,加上學號水印
    4: 讓系統支持Float類,並在MyDoc類中添加測試代碼代表添加正確,提交測試代碼和運行結的截圖,加上學號水印
    5: 讓系統支持Double類,並在MyDoc類中添加測試代碼代表添加正確,提交測試代碼和運行結的截圖,加上學號水印

2.實驗結果截圖學習

3.代碼連接:
Complex.java
ComplexTest.java測試

4、面向對象程序設計-4

1.實驗要求:

  • 提交:單元測試代碼和運行成功截圖及碼雲上代碼連接,截圖要加上學號水印

  • 參考http://www.cnblogs.com/rocedu/p/6736847.html

  • 任務:以TDD的方式開發一個複數類Complex,要求以下:

// 定義屬性並生成getter,setter

double RealPart;
 double ImagePart;

// 定義構造函數

public Complex()
 public Complex(double R,double I )

//Override Object

public boolean equals(Object obj)
public String toString()

// 定義公有方法:加減乘除

Complex ComplexAdd(Complex a)
 Complex ComplexSub(Complex a)
 Complex ComplexMulti(Complex a)
 Complex ComplexDiv(Complex a)

2.實驗過程:
(1)僞代碼:

屬性:  
 定義實部;  
 定義虛部;  
 設置複數的實部;  
 設置複數的虛部;  
 返回複數的實部;  
 返回複數的虛部;  
 
 方法:  
 定義構造函數  
 定義公有方法(加減乘除)  
 將結果轉化成字符串形式輸出

(2)測試代碼:

import junit.framework.TestCase;
import org.junit.Test;

public class ComplexTest extends TestCase {
    Complex c1 = new Complex(2,1);
    Complex c2 = new Complex(0,3);
    Complex c3 = new Complex(-1,-1);
    @Test
    public void testgetRealPart() throws Exception {
        assertEquals(0.0,Complex.getRealPart(0.0));
        assertEquals(-2.0,Complex.getRealPart(-2.0));
        assertEquals(6.0,Complex.getRealPart(6.0));
    }
    @Test
    public void testComplexAdd() throws Exception{
        assertEquals("2.0+4.0i",c1.ComplexAdd(c2).toString());
        assertEquals("-1.0+2.0i",c2.ComplexAdd(c3).toString());
        assertEquals("1.0",c1.ComplexAdd(c3).toString());
    }
    @Test
    public void testComplexSub() throws Exception{
        assertEquals("2.0 -2.0i",c1.ComplexSub(c2).toString());
        assertEquals("1.0+4.0i",c2.ComplexSub(c3).toString());
        assertEquals("-3.0 -2.0i",c3.ComplexSub(c1).toString());
    }
    @Test
    public void testComplexMulti() throws Exception {
        assertEquals("-3.0+6.0i",c1.ComplexMulti(c2).toString());
        assertEquals("3.0 -3.0i",c2.ComplexMulti(c3).toString());
        assertEquals("-1.0 -3.0i",c3.ComplexMulti(c1).toString());
    }
    @Test
    public void testComplexDiv() throws Exception {
        assertEquals("0.6666666666666666+0.3333333333333333i",c1.ComplexDiv(c2).toString());
        assertEquals("-1.5 -1.5i",c2.ComplexDiv(c3).toString());
        assertEquals("-0.6 -0.6i",c3.ComplexDiv(c1).toString());
    }

}

(3)測試代碼運行成功截圖:

(4)產品代碼:

public class Complex {
    private double r;
    private double i;

    public Complex(double r, double i) {
        this.r = r;
        this.i = i;
    }

    public static double getRealPart(double r) {
        return r;
    }

    public static double getImagePart(double i) {
        return i;
    }

    public Complex ComplexAdd(Complex c) {
        return new Complex(r + c.r, i + c.i);
    }
    public Complex ComplexSub(Complex c) {
        return new Complex(r - c.r, i - c.i);
    }
    public Complex ComplexMulti(Complex c) {
        return new Complex(r * c.r - i * c.i, r * c.i + i * c.r);
    }
    public Complex ComplexDiv(Complex c) {
        return new Complex((r * c.i + i * c.r)/(c.i * c.i + c.r * c.r), (i * c.i + r * c.r)/(c.i * c.i + c.r * c.r));
    }

    public String toString() {
        String s = " ";
        if (i > 0)
            s =  r + "+" + i + "i";
        if (i == 0)
            s =  r + "";
        if (i < 0)
            s = r + " " + i + "i";
        return s;
    }
}

5、面向對象程序設計5

1.實驗要求:

使用WhiteStarUML對實驗二中的代碼進行建模,發類圖的截圖,加上學號水印。
參考(http://www.cnblogs.com/rocedu/p/6736847.html)

2.實驗截圖:

6、實驗過程當中遇到的問題及解決過程

Q1:在安裝Junit時,按照老師給的教程,點擊Install JetBrains plugin... 然而並無發現JUnitGenerator V2.0.

A1:通過個人學習夥伴的指點,而且本身在網上查找了一下,找到了原來學長寫的一篇關於安裝Junit的博客,原來,要點擊如圖所示的Browse repositories,就能搜到了,安裝好就如圖所示了。

Q2:在使用Junit學習時,發如今安裝好junit.jar,仍然沒法使用。
A2:在好友的指導下,在Everything中須要安裝junit.jarjunit-4.12.jar,如圖所示,在Everything中查找到兩個包,並安裝,安裝好後如圖所示。


Q3:在編寫實驗2的測試碼時,出現瞭如圖所示錯誤。

A3:通過錯誤提示,應該是下標越界問題,因而,我檢查了代碼中是否有錯誤的地方,結果發現了本身因馬虎所犯下的錯誤,如圖所示。因此,你們必定要引覺得戒。

Q4:本次實驗,婁老師讓咱們本身練習畫UML圖,以前本身一直沒有過重視這個知識點,因而我借這個機會總結了一下易混符號的區別。
A4:
1.實線箭頭和虛線箭頭:

實線箭頭表明的是關聯關係。若是A類中的成員變量是用B類聲明的對象,那麼A和B的關係是關聯關係,則是 B指向A。
虛線箭頭表明的是依賴關係。若是A類中某個方法的參數是B類聲明的對象或某個方法返回的數據類型是B類對象,那麼A和B是依賴關係,則爲B指向A。

2.實線空三角和虛線空三角:

實線空三角是指繼承關係,起始端是子類的UML圖,終點端是父類的UML圖。

虛線空三角用於實現接口,UML經過使用虛線鏈接類和它所實現的接口,虛線的起始端是類,終點端是它所實現的接口。

7、實驗總結與體會

本次實驗內容較爲豐富,首先咱們學習了單元測試和TDD,學會利用這兩種方式來編寫程序,起初,老師給的博客中常常提到「測試碼」一詞,現在,本身也學會寫測試碼,對本身從此的編程頗有好處。其次,本身對UML圖的理解也更爲深刻,體會到了UML圖與代碼聯繫的緊密性,本次實驗收穫頗豐。

步驟 耗時 百分比
需求分析 12min 10%
設計 10min 8%
代碼實現 48min 40%
測試 40min 34%
分析總結 10min 8%
相關文章
相關標籤/搜索