20165308 實驗二 Java物件導向程式設計

來源:互聯網
上載者:User

標籤:ide   com   AC   exception   多態   理解   div   針對   sub()   

20165308 實驗二 Java物件導向程式設計實驗二 Java物件導向程式設計一、實驗報告封面
  • 課程:Java程式設計 班級:1653班 姓名:張士洋 學號:20165308
  • 指導教師:婁嘉鵬 實驗日期:2018年4月16日 實驗時間:15:35 - 17:15

  • 實驗序號:實驗二 實驗名稱:Java物件導向程式設計

實驗內容及要求:
  1. 初步掌握單元測試和TDD
  2. 理解並掌握物件導向三要素:封裝、繼承、多態
  3. 初步掌握UML建模
  4. 熟悉S.O.L.I.D原則
  5. 瞭解設計模式
實驗內容、步驟與體會目錄:
  • (一)初步掌握單元測試和TDD
  • (二)以TDD的方式研究學習StringBuffer
  • (三)對MyDoc類進行擴充,讓其支援Boolean類,初步理解設計模式
  • (四)以TDD的方式開發一個複數類Complex
  • (五)使用StarUML對實驗中的代碼進行建模

    二、實驗內容及步驟

(一)使用JUnit 單元測試

參考 http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST 完成單元測試的學習提交最後三個JUnit測試案例(正常情況,錯誤情況,邊界情況)都通過的,上要有畫圖加浮水印,輸入自己的學號本提交點考查JUnit會不會使用,測試案例至少要包含正常情況,錯誤情況,邊界情況的測試。

產品代碼

public class MyUtil{    public static String percentage2fivegrade(int grade){        //如果成績小於0,轉成“錯誤”        if ((grade < 0))            return "錯誤";            //如果成績小於60,轉成“不及格”        else if (grade < 60)            return "不及格";            //如果成績在60與70之間,轉成“及格”        else if (grade < 70)            return "及格";            //如果成績在70與80之間,轉成“中等”        else if (grade < 80)            return "中等";            //如果成績在80與90之間,轉成“良好”        else if (grade < 90)            return "良好";            //如果成績在90與100之間,轉成“優秀”        else if (grade <= 100)            return "優秀";            //如果成績大於100,轉成“錯誤”        else            return "錯誤";    }}

測試代碼

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));    }    @Test    public void testExceptions () {        assertEquals("錯誤",MyUtil.percentage2fivegrade(105));        assertEquals("錯誤",MyUtil.percentage2fivegrade(-55));    }    @Test    public void testBoundary () {        assertEquals("不及格", MyUtil.percentage2fivegrade(0));        assertEquals("及格", MyUtil.percentage2fivegrade(60));        assertEquals("中等", MyUtil.percentage2fivegrade(70));        assertEquals("良好", MyUtil.percentage2fivegrade(80));        assertEquals("優秀", MyUtil.percentage2fivegrade(90));        assertEquals("優秀", MyUtil.percentage2fivegrade(100));    }}

測試

(二)以TDD的方式研究學習StringBuffer

TDD的一般步驟如下:

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

產品代碼

public class StringBufferDemo{    StringBuffer buffer = new StringBuffer();    public StringBufferDemo(StringBuffer buffer){        this.buffer = buffer;    }    public Character charAt(int i){        return buffer.charAt(i);    }    public int capacity(){        return buffer.capacity();    }    public int length(){        return buffer.length();    }    public int indexOf(String buf) {        return buffer.indexOf(buf);    }}

測試代碼

import junit.framework.TestCase;import org.junit.Test;public class StringBufferDemoTest extends TestCase {    StringBuffer a = new StringBuffer("StringBuffer");    //測試12個字元    StringBuffer b = new StringBuffer("StringBufferStringBuffer");    //測試24個字元    StringBuffer c = new StringBuffer("StringBufferStringBufferStringBuffer");    //測試36個字元    StringBuffer d = new StringBuffer("StringBufferStringBufferStringBufferStr");    //測試39個字元    @Test    public void testcharAt() {        assertEquals(‘S‘,a.charAt(0));        assertEquals(‘e‘,b.charAt(10));        assertEquals(‘f‘,c.charAt(20));        assertEquals(‘B‘,d.charAt(30));    }    @Test    public void testcapacity() {        assertEquals(28,a.capacity());        assertEquals(40,b.capacity());        assertEquals(52,c.capacity());        assertEquals(55,d.capacity());    }    @Test    public void testindexOf() {        assertEquals(0,a.indexOf("Str"));        assertEquals(3,b.indexOf("ing"));        assertEquals(6,c.indexOf("Buffer"));        assertEquals(8,d.indexOf("ff"));    }    @Test    public void testlength() {        assertEquals(12,a.length());        assertEquals(24,b.length());        assertEquals(36,c.length());        assertEquals(39,d.length());    }}

測試

(三)設計模式樣本進行擴充,讓系統支援Boolean類

參考實驗二 Java物件導向程式設計對設計模式樣本進行擴充,體會OCP原則和DIP原則的應用,初步理解設計模式用自己的學號%6進行取餘運算,根據結果進行代碼擴充:0:讓系統支援Byte類,並在MyDoc類中添加測試代碼錶明添加正確,提交測試代碼和運行結的,加上學號浮水印1:讓系統支援Short類,並在MyDoc類中添加測試代碼錶明添加正確,提交測試代碼和運行結的,加上學號浮水印2:讓系統支援Boolean類,並在MyDoc類中添加測試代碼錶明添加正確,提交測試代碼和運行結的,加上學號浮水印3:讓系統支援Long類,並在MyDoc類中添加測試代碼錶明添加正確,提交測試代碼和運行結的,加上學號浮水印4:讓系統支援Float類,並在MyDoc類中添加測試代碼錶明添加正確,提交測試代碼和運行結的,加上學號浮水印5:讓系統支援Double類,並在MyDoc類中添加測試代碼錶明添加正確,提交測試代碼和運行結的,加上學號浮水印

產品代碼

abstract class Data{    public abstract void DisplayValue();}class Integer extends Data {    int value;    Integer(){        value=100;    }    public void DisplayValue(){        System.out.println(value);    }}class Boolean extends Data{    boolean value;    Boolean(){        value=true;    }    public void DisplayValue(){        System.out.println(value);    }}class Document {    Data pd;    Document() {        pd=new Boolean();    }    public void DisplayData(){        pd.DisplayValue();    }}public class MyDoc {    static Document d;    public static void main(String[] args) {        d = new Document();        d.DisplayData();    }}

測試

(四)以TDD的方式開發一個複數類Complex

參考http://www.cnblogs.com/rocedu/p/6736847.html任務:以TDD的方式開發一個複數類Complex,要求如下:// 定義屬性並產生getter,setterdouble RealPart;double ImagePart;// 定義建構函式public Complex()public Complex(double R,double I)//Override Objectpublic boolean equals(Object obj)public String toString()// 定義公有方法:加減乘除Complex ComplexAdd(Complex a)Complex ComplexSub(Complex a)Complex ComplexMulti(Complex a)Complex ComplexDiv(Complex a)

產品代碼

import java.lang.*;public class Complex {    // 定義屬性並產生getter,setter    public void setRealpart(double R){        RealPart=R;    }    public double getRealpart(){        return RealPart;    }    public void setImagePart(double I){        ImagePart=I;    }    public double getImagePart(){        return ImagePart;    }    double RealPart;    double ImagePart;    // 定義建構函式    public Complex(double R,double I){        RealPart=R;        ImagePart=I;    }    //Override Object    public boolean equals(Complex obj){        if(this.getRealpart()==obj.getRealpart() && this.getImagePart()==obj.getImagePart())            return true;        else            return false;    }    public String toString(){        return RealPart+"+"+ImagePart+"i";    }    // 定義公有方法:加減乘除    public Complex ComplexAdd(Complex a){        return new Complex(this.RealPart+a.RealPart,this.ImagePart+a.ImagePart);    }    public Complex ComplexSub(Complex a){        return new Complex(this.RealPart-a.RealPart,this.ImagePart-a.ImagePart);    }    public Complex ComplexMulti(Complex a){        return new Complex(this.RealPart*a.RealPart-this.ImagePart*a.ImagePart,                this.RealPart*a.ImagePart+this.ImagePart*a.RealPart);    }    public Complex ComplexDiv(Complex a){        double x=this.RealPart;        double y=this.ImagePart;        double m=a.RealPart;        double n=a.ImagePart;        return new Complex((x*m+y*n)/(m*m+n*n),(y*m-x*n)/(m*m+n*n));    }}

測試代碼

import junit.framework.TestCase;import org.junit.Test;public class ComplexTest extends TestCase {    Complex p1=new Complex(1,1);    Complex p2=new Complex(1,-1);    @Test    public void testAdd(){        assertEquals("2.0+0.0i",p1.ComplexAdd(p2).toString());        System.out.println(p1.ComplexAdd(p2));    }    @Test    public void testSub(){        assertEquals("0.0+2.0i",p1.ComplexSub(p2).toString());        System.out.println(p1.ComplexSub(p2));    }     @Test    public void testMulti(){        assertEquals("2.0+0.0i",p1.ComplexMulti(p2).toString());        System.out.println(p1.ComplexSub(p2));    }      @Test    public void testDiv(){        assertEquals("0.0+1.0i",p1.ComplexDiv(p2).toString());        System.out.println(p1.ComplexDiv(p2));    }}

測試

(五)UML

使用[WhiteStarUML](http://whitestaruml.sourceforge.net/)對實驗二中的代碼進行建模,發類圖的,加上學號浮水印。參考http://www.cnblogs.com/rocedu/p/6736847.html類圖中只少兩個類。
四、實驗體會與總結

實驗過程中,真的遇到了超級多的困難而且都真的很難去自己全部解決,例如在對MyDoc類進行擴充,讓其支援Boolean類時如何合法定義有關變數的類型,以及複數類Complex的編寫等,要得到多次同學的協助才能結果,雖然過程很艱難,但是學會了這種通過先寫虛擬碼再利用測試代碼輔助完成產品代碼的方法,這樣對於編程來說比較方便,而且對於各種情況的監測利用Junit測試也是真的方便。

20165308 實驗二 Java物件導向程式設計

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.