2017-2018-2 20165327 實驗二 《Java面向對象程序設計》實驗報告

20165327《Java程序設計》實驗二 《Java面向對象程序設計》實驗報告html

##實驗二 《Java面向對象程序設計》 ###1、實驗報告封面 課程:Java程序設計 班級:1653 姓名:楊靖濤 學號:20165327編程

指導教師:婁嘉鵬 實驗日期:2018.4.15設計模式

實驗時間:15:35 - 17:50 實驗序號:數組

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

提交最後三個測試用例都經過的截圖,截圖上要有畫圖加水印,輸入本身的學號。 實驗要求: 1.沒有Linux基礎的同窗建議先學習《Linux基礎入門(新版)》《Vim編輯器》 課程; 2.完成實驗、撰寫實驗報告,注意實驗報告重點是運行結果,遇到的問題(工具查找,安裝,使用,程序的編輯,調試,運行等)、解決辦法(空洞的方法如「查網絡」、「問同窗」、「看書」等一概得0分)以及分析(從中能夠獲得什麼啓示,有什麼收穫,教訓等); 3.實驗報告中統計本身的PSP(Personal Software Process)時間; 4.嚴禁抄襲。 ###實驗內容與步驟編程語言

參考 http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST 參考http://www.cnblogs.com/rocedu/p/6736847.html 提交點一:在一個MyUtil類中解決一個百分制成績轉成「優、良、中、及格、不及格」五級製成績的功能。編輯器

首先要明確程序要實現什麼功能?要實現這些功能須要哪些操做? 僞代碼從意圖層面來解決問題。最終,僞代碼是產品代碼最天然的、最好的註釋。所以,能夠利用僞代碼來明確以上這些要求。 注:僞代碼與具體編程語言無關,不要寫與具體編程語言語法相關的語句。ide

僞代碼

  • 百分制轉五分制: 若是成績小於60,轉成「不及格」 若是成績在60與70之間,轉成「及格」 若是成績在70與80之間,轉成「中等」 若是成績在80與90之間,轉成「良好」 若是成績在90與100之間,轉成「優秀」 其餘,轉成「錯誤」

用Java語言翻譯僞代碼,生成產品代碼函數

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 "錯誤";
}
}

2.給新建好的test設置環境變量,也就是讓IDEA知道這裏存的是測試代碼。在test上右擊而後MakeDirectoryas以後選擇testSourceRoot,這樣就把這個文件夾設置成了存放測試代碼的源文件的文件夾:工具

3.以下圖:建立測試類,在test目錄中編寫測試代碼MyUtilTest,其中的測試用例分爲測試正常testNormal測試邊界testBoundary測試異常testException三部分:

可利用如下測試代碼對寫成的產品代碼進行測試,檢查是否有不完善的地方。

測試代碼

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

import static org.junit.Assert.*;

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 testException(){
        assertEquals("錯誤",MyUtil.percentage2fivegrade(-58));
        assertEquals("錯誤",MyUtil.percentage2fivegrade(118));
    }
    @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

對老師給的<kbd>StringBufferDemo</kbd>產品代碼進行改寫,並寫出<kbd>StringBuffer</kbd>中的<kbd>charAt</kbd>、<kbd>length</kbd>、<kbd>capcity</kbd>這幾個方法對應的測試代碼進行測試。

按照老師給的參考代碼中StringBufferDemo中調用的方法,將其更改成個人產品代碼。

產品代碼:

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);
    }
}
  • 首先要理解以上代碼中的方法。經過查詢API文檔,可知:
    • <kbd> charAt(int i)</kbd>:返回此序列中指定索引處的 char 值。第一個 char 值在索引 0 處,第二個在索引 1 處,依此類推,這相似於數組索引。

    • <kbd>indexOf(String s)</kbd>:返回輸入的子字符串的第一個字母在母字符串的位置。

    • <kbd> capacity()</kbd>:返回當前容量。容量指可用於最新插入的字符的存儲量,超過這一容量就須要再次進行分配。

    • <kbd>length()</kbd>:返回子浮窗的長度。

瞭解以上方法以後,須要編寫測試代碼對它們進行測試。 測試代碼:

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

public class StringBufferDemoTest extends TestCase {
    StringBuffer string1 = new StringBuffer("Students");
    StringBuffer string2 = new StringBuffer("Students of class 1653");
    StringBuffer string3 = new StringBuffer("Students of class 1653 and class 1652");
    @Test
    public void testCharAt() throws Exception{
        assertEquals('t',string1.charAt(1));
        assertEquals(' ',string2.charAt(8));
        assertEquals('1',string3.charAt(18));
    }
    @Test
    public void testCapacity() throws Exception{
        assertEquals(24,string1.capacity());
        assertEquals(38,string2.capacity());
        assertEquals(53,string3.capacity());
    }
    @Test
    public void testindexOf() throws Exception{
        assertEquals(1, string1.indexOf("tud"));
        assertEquals(8, string2.indexOf(" of"));
        assertEquals(18, string3.indexOf("1653"));
    }
    @Test
    public void testlength() throws Exception{
        assertEquals(8, string1.length());
        assertEquals(22, string2.length());
        assertEquals(37, string3.length());
    }
}

運行截圖

提交點三: 參考(http://www.cnblogs.com/rocedu/p/4472842.html)

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

對設計模式示例進行擴充,體會OCP原則和DIP原則的應用,初步理解設計模式 用本身的學號%6進行取餘運算,根據結果進行代碼擴充: 3: 讓系統支持Long類,並在MyDoc類中添加測試代碼代表添加正確,提交測試代碼和運行結的截圖,加上學號水印 代碼:

abstract class Data {
 	    abstract public void DisplayValue();
 	}
 	
 	class Integer extends  Data {
 	    int value;
 	    Integer() {
 	        value=100;
 	    }
 	    public void DisplayValue(){
 	        System.out.println (value);
 	    }
 	}
 	
 	class Long extends  Data {
 	    int value;
 	    Long() {
 	        value=20165327;
 	    }
 	    public void DisplayValue(){
 	        System.out.println (value);
 	    }
 	}
 	// Pattern Classes
 	abstract class Factory {
 	    abstract public Data CreateDataObject();
 	}
 	
 	class IntFactory extends Factory {
 	    public Data CreateDataObject(){
 	        return new Integer();
 	    }
 	}
 	class LongFactory extends Factory {
 	    public Data CreateDataObject(){
 	        return new Long();
 	    }
 	}
 	
 	//Client classes
 	class Document {
 	    Data pd;
 	    Document(Factory pf){
 	        pd = pf.CreateDataObject();
 	    }
 	    public void DisplayData(){
 	        pd.DisplayValue();
 	    }
 	}
 	//Test class
 	public class MyDoc {
 	    static Document d;
 	    public static void main(String[] args) {
 	        d = new Document(new LongFactory());
 	        d.DisplayData();
 	   }
 	}

運行截圖

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

參考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)

代碼:

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

public class ComplexTest extends TestCase {
    Complex a = new Complex(5.0, 6.0);
    Complex b = new Complex(-3.0, 4.0);

    @Test
    public void testgetRealPart() {
        assertEquals(5.0,a.getRealPart());
        assertEquals(-3.0,b.getRealPart());
    }

    @Test
    public void testgetImagePart() {
        assertEquals(6.0,a.getImagePart());
        assertEquals(4.0,b.getImagePart());
    }

    @Test
    public void testtoString() {
        assertEquals("Complex{RealPart=5.0, ImagePart=6.0}",a.toString());
        assertEquals("Complex{RealPart=-3.0, ImagePart=4.0}",b.toString());
    }

    @Test
    public void testequals() {
        assertEquals(false,a.equals(b));
        Complex c = new Complex(a.getRealPart(),a.getImagePart());
        assertEquals(true,a.equals(c));
    }

    @Test
    public void testComplexAdd() {
        assertEquals(2.0,a.ComplexAdd(b).getRealPart());
        assertEquals(10.0,a.ComplexAdd(b).getImagePart());
    }

    @Test
    public void testComplexSub() {
        assertEquals(8.0,a.ComplexSub(b).getRealPart());
        assertEquals(2.0,a.ComplexSub(b).getImagePart());
    }

    @Test
    public void testComplexMulti() {
        assertEquals(-39.0,a.ComplexMulti(b).getRealPart());
        assertEquals(2.0,a.ComplexMulti(b).getImagePart());
    }

    @Test
    public void testComplexDiv() {
        assertEquals(0.36,a.ComplexDiv(b).getRealPart());
        assertEquals(-1.52,a.ComplexDiv(b).getImagePart());
    }
}

運行截圖

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

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

類圖中只少兩個類。

實驗時間分配

步驟 耗時 百分比
需求分析 20 14.3%
設計 50 35.7%
代碼實現 30 21.4%
測試 20 14.3%
分析總結 20 14.3%
相關文章
相關標籤/搜索