2018-2019-2 20175329許鈺瑋 實驗二《Java面向對象程序設計》實驗報告

實驗內容

1.初步掌握單元測試和TDD
2.理解並掌握面向對象三要素:封裝、繼承、多態
3.初步掌握UML建模
4.熟悉S.O.L.I.D原則
5.瞭解設計模式
編程

(一)單元測試

對於單元測試中單元的含義,通常來講,要根據實際狀況去斷定其具體含義,如Java裏單元指一個類。編程是智力活動,不是打字,編程前要把幹什麼、如何幹想清楚才能把程序寫對、寫好。與目前很多同窗一說編程就打開編輯器寫代碼不一樣,我但願同窗們養成一個習慣,當大家想用程序解決問題時,要會寫三種碼:設計模式

  • 僞代碼
  • 產品代碼
  • 測試代碼
    在 IDEA中咱們把產品代碼放在src目錄中,把測試代碼放在test目錄中,右鍵單擊項目,在彈出的菜單中選擇New->Directory新建一個目錄:

    在IDEA中運行結果以下,測試結果符合預期:

    在Eclipse中運行結果以下,測試結果符合預期:

    咱們不能只測試正常狀況,下面看看異常狀況如何,好比輸入爲負分或大於100的成績

    測試結果以下:

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

  • 安裝JUnit
  • 測試代碼
import org.junit.Test; 
import junit.framework.TestCase;
public class MyUtilTest extends TestCase { 
@Test 
    public void testNormal() { 
        assertEquals("不及格", MyUtil.percentage2fivegrade(55));             
        assertEquals("及格", MyUtil.percentage2fivegrade(65));               
        assertEquals("中等", MyUtil.percentage2fivegrade(75));          
        assertEquals("良好", MyUtil.percentage2fivegrade(85));    
        assertEquals("優秀", MyUtil.percentage2fivegrade(95)); 
        }
    }

運行結果以下
編輯器

咱們增長一個測試異常狀況的用例testException和一個測試邊界狀況的用例testBoundary
函數

(三)設計模式初步

(四)使用TDD的方式設計實現複數類:Complex

  • 測試代碼
import org.junit.Test;

public class ComplexNumberTest {
    @Test
    public void TestFunction1() {
        ComplexNumber complexnumber = new ComplexNumber(1, 3);
        ;
        assert complexnumber.m_dRealPart == 1 : "ComplexNumber(double r,double I)構造函數有錯誤";
        assert complexnumber.m_dImaginPart == 3 : "ComplexNumber(double r,double I)構造函數有錯誤";
    }

    @Test
    public void TestFunction2() {
        ComplexNumber complexnumber = new ComplexNumber();

        assert complexnumber.m_dImaginPart == 0 : "ComplexNumber()構造函數有錯誤";
        assert complexnumber.m_dRealPart == 0 : "ComplexNumber()構造函數有錯誤";
    }

    @Test
    public void TestSetWay() {
        ComplexNumber complexnumber = new ComplexNumber();

        complexnumber.SetRealPart(1);
        complexnumber.SetImaginaryPart(1);
        assert complexnumber.m_dRealPart == 1 : "SetRealPart方法有錯誤";
        assert complexnumber.m_dImaginPart == 1 : "SetImaginaryPart方法有錯誤";
    }

    @Test
    public void TestgetWay() {
        ComplexNumber complexnumber = new ComplexNumber();

        complexnumber.SetRealPart(2);
        complexnumber.SetImaginaryPart(5);
        assert complexnumber.GetRealPart() == 2 : "GetRealPart方法有錯誤";
        assert complexnumber.GetImaginaryPart() == 5 : "GetImaginaryPart方法有錯誤";
    }

    @Test
    public void TestStringWay() {
        ComplexNumber complexnumber = new ComplexNumber(2,6);
        assert complexnumber.toString()=="2.0+6.0i":"toString方法有錯誤";
    }

    @Test
    public void TestAddWay1() {
        ComplexNumber complexnumber1 = new ComplexNumber(1,1);
        ComplexNumber complexnumber2 = new ComplexNumber(2,2);
        ComplexNumber complexnumber3=complexnumber1.ComplexAdd1(complexnumber2);

        assert complexnumber3.m_dRealPart == 3 : "ComplexAdd方法有錯誤";
        assert complexnumber3.m_dImaginPart == 3 : "ComplexAdd方法有錯誤";
    }

    @Test
    public void TestAddWay2() {
        ComplexNumber complexnumber1 = new ComplexNumber(1,1);
        ComplexNumber complexnumber2=complexnumber1.ComplexAdd2(2);

        assert complexnumber2.m_dRealPart == 3 : "ComplexAdd方法有錯誤";
        assert complexnumber2.m_dImaginPart == 1 : "ComplexAdd方法有錯誤";
    }

    @Test
    public void TestMinusWay1() {
        ComplexNumber complexnumber1 = new ComplexNumber(1,1);
        ComplexNumber complexnumber2 = new ComplexNumber(2,2);
        ComplexNumber complexnumber3=complexnumber2.ComplexMinusl(complexnumber1);

        assert complexnumber3.m_dRealPart == 1 : "ComplexMinus方法有錯誤";
        assert complexnumber3.m_dImaginPart == 1 : "ComplexMinus方法有錯誤";
    }

    @Test
    public void TestMinusWay2() {
        ComplexNumber complexnumber1 = new ComplexNumber(5,1);
        ComplexNumber complexnumber2=complexnumber1.ComplexMinus2(1);

        assert complexnumber2.m_dRealPart == 4 : "ComplexMinus方法有錯誤";
        assert complexnumber2.m_dImaginPart == 1 : "ComplexMinus方法有錯誤";
    }

    @Test
    public void TestMultiWay1() {
        ComplexNumber complexnumber1 = new ComplexNumber(3,3);
        ComplexNumber complexnumber2 = new ComplexNumber(3,5);
        ComplexNumber complexnumber3=complexnumber1.ComplexMultil(complexnumber2);

        assert complexnumber3.m_dRealPart == -6 : "ComplexMinus方法有錯誤";
        assert complexnumber3.m_dImaginPart == 24 : "ComplexMinus方法有錯誤";

    }

    @Test
    public void TestMultiWay2() {
        ComplexNumber complexnumber1 = new ComplexNumber(3,3);
        ComplexNumber complexnumber2=complexnumber1.ComplexMulti2(2);

        assert complexnumber2.m_dRealPart == 6 : "ComplexMinus方法有錯誤";
        assert complexnumber2.m_dImaginPart == 6 : "ComplexMinus方法有錯誤";

    }

}
  • 實驗代碼
public class ComplexNumber {
   public double m_dRealPart;
   public double m_dImaginPart;

    public ComplexNumber(){
        this.m_dImaginPart=0;
        this.m_dRealPart=0;
    }

    public ComplexNumber(double r,double I){
        this.m_dRealPart=r;
        this.m_dImaginPart=I;
    }

    public double GetRealPart(){
        return this.m_dRealPart;
    }

    public double GetImaginaryPart(){
        return this.m_dImaginPart;
    }

    public void SetRealPart(double d) {
        this.m_dRealPart=d;
    }

    public void SetImaginaryPart(double d) {
        this.m_dImaginPart=d;
    }

    public ComplexNumber ComplexAdd1(ComplexNumber c){
        this.m_dRealPart=this.m_dRealPart+c.m_dRealPart;
        this.m_dImaginPart=this.m_dImaginPart+c.m_dImaginPart;
        return this;
    }

    public ComplexNumber ComplexAdd2(double c){
        this.m_dRealPart=this.m_dRealPart+c;
        return this;
    }

    public ComplexNumber ComplexMinusl(ComplexNumber c){
        this.m_dRealPart=this.m_dRealPart-c.m_dRealPart;
        this.m_dImaginPart=this.m_dImaginPart-c.m_dImaginPart;
        return this;
    }

    public ComplexNumber ComplexMinus2(double c){
        this.m_dRealPart=this.m_dRealPart-c;
        return this;
    }

    public ComplexNumber ComplexMultil(ComplexNumber c){
        double a=this.m_dImaginPart;
        double b=this.m_dRealPart;
        this.m_dRealPart=b*c.m_dRealPart-(a*c.m_dImaginPart);
        this.m_dImaginPart=b*c.m_dImaginPart+a*c.m_dRealPart;
        return this;
    }

    public ComplexNumber ComplexMulti2(double c){
        double a=this.m_dImaginPart;
        double b=this.m_dRealPart;
        this.m_dRealPart=this.m_dRealPart*c;
        this.m_dImaginPart=this.m_dImaginPart*c;
        return this;
    }

    public String toString(){
        return this.m_dRealPart+"+"+this.m_dImaginPart+"i";
    }
}
  • 實驗結果截圖
    單元測試

  • string語法有誤調整以下
    測試

(五)UML圖設計

相關文章
相關標籤/搜索