2018-2019-2 20175214 實驗二《面向對象程序設計》實驗報告

20175214 實驗二 面向對象程序設計

1、前期準備

    1. 熟悉三種代碼的編寫
    • 僞代碼
    • 產品代碼
    • 測試代碼
    1. 學會 IDEA中配置單元測試工具JUnit
    • 打開IDEA,選擇File->Setting打開設置對話框
    • 在設置對話框中選擇Plugins, 單擊Marketplace
    • 選擇JUnitGenerator V2.0,點擊Install安裝
      java

    • 安裝好後能夠在Installed裏查看
    • 安裝完成後,要開始配置。在IDEA中新建一個項目,而後新建一個空類MyUtil:
    • 鼠標右擊類名,選擇go to->test->Create New Test
    • 彈出一個對話框,選擇JUnit3
      git

    • 輸入時junit可能會標紅,能夠雙擊標紅處,點擊紅色燈泡導入須要的類。設計模式

2、實驗內容

  • 任務一:對MyUtil類進行測試,測試用例至少要包含正常狀況,錯誤狀況,邊界狀況的測試。
  • 任務二:以TDD的方式研究學習StringBuffer,提交單元測試用例和測試經過的截圖。
  • 任務三:
    • 對設計模式示例進行擴充,體會OCP原則和DIP原則的應用。
    • 讓系統支持Boolean類,並在MyDoc類中添加測試代碼代表添加正確,提交測試代碼和運行結的截圖,加上學號水印。
  • 任務四:以TDD的方式開發一個複數類Complex。
  • 任務五:
    • 使用StarUML對實驗二中的代碼進行建模,發類圖的截圖,加上學號水印。
    • 類圖中至少兩個類。
    • 類,繼承,接口實現,組合在UML中表達。

3、實驗步驟

  • 任務一工具

    • 僞代碼:
    百分制轉五分制:
    若是成績小於60,轉成「不及格」
    若是成績在60與70之間,轉成「及格」
    若是成績在70與80之間,轉成「中等」
    若是成績在80與90之間,轉成「良好」
    若是成績在90與100之間,轉成「優秀」
    其餘,轉成「錯誤」
    • 產品代碼:
    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 junit.framework.TestCase;
import org.junit.Test;

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(-55));
            assertEquals("錯誤",MyUtil.percentage2fivegrade(105));
        }
        @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));
        }
    }
  • 測試結果截圖:
    單元測試

  • 任務二學習

    • 產品代碼
    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;

import static org.junit.Assert.*;

public class StringBufferDemoTest extends TestCase {

    StringBuffer a = new StringBuffer("StringBuffer");
    StringBuffer b = new StringBuffer("StringBufferStringBuffer");
    StringBuffer c = new StringBuffer("StringBufferStringBufferStringBuffer");

    @Test
    public void testCharAt() throws Exception {
        assertEquals('S', a.charAt(0));
        assertEquals('g', a.charAt(5));
        assertEquals('r', a.charAt(11));
    }

    @Test
    public void testcapacity() throws Exception {
        assertEquals(28, a.capacity());
        assertEquals(40, b.capacity());
        assertEquals(52, c.capacity());
    }

    @Test
    public void testlength() throws Exception {
        assertEquals(12, a.length());//驗證字符串a的長度
        assertEquals(24, b.length());
        assertEquals(36, c.length());
    }

    @Test
    public void testindexOf() {
        assertEquals(6, a.indexOf("Buff"));
        assertEquals(5, b.indexOf("gBu"));
        assertEquals(10, c.indexOf("erS"));
    }
}
  • 測試結果截圖:
    測試

  • 任務三ui

    • 產品代碼
    // Server Classes 
    abstract class Data {
      abstract public void DisplayValue();
    }
    class Integer extends  Data {
      int value;
      Integer() {
          value=100;
      }
      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();
      }
    }
    //Client classes 
    class Document {
      Data pd;
      Document(Factory pf){
          pd = pf.CreateDataObject();
      }
      public void DisplayData(){
          pd.DisplayValue();
      }
    }
    class Boolean extends  Data {
      boolean flag;
      Boolean() {
          flag=true;
      }
      public void DisplayValue(){
          System.out.println (flag);
      }
    }
    class BooleanFactory extends Factory {
      public Data CreateDataObject() {
          return new Boolean();
      }
    }
    //Test class
    public class MyDoc {
      static Document d;
      public static void main(String[] args) {
          d = new Document(new IntFactory());
          d.DisplayData();
    
          d = new Document(new BooleanFactory());
          d.DisplayData();
      }
    }
    • 測試結果截圖
  • 任務四this

    • 產品代碼
public class Complex {
    double RealPart;
    double ImagePart;

    public Complex() {
    }

    public Complex(double R, double I) {
        RealPart = R;
        ImagePart = I;
    }

    public boolean equals(Complex a) {
        if (a.RealPart == this.RealPart && a.ImagePart == this.ImagePart) {
            return true;
        } else {
            return false;
        }
    }

    public String toString() {
        if (this.RealPart != 0 && this.ImagePart > 0) {
            return this.RealPart + " + " + this.ImagePart + "i";
        } else if (this.RealPart != 0 && this.ImagePart == 0) {
            return String.valueOf(this.RealPart);
        } else if (this.RealPart != 0 && this.ImagePart < 0) {
            return this.RealPart + " - " + -this.ImagePart + "i";
        } else if (this.RealPart == 0 && this.ImagePart != 0) {
            return this.ImagePart + "i";
        } else {
            return "0";
        }
    }

    Complex ComplexAdd(Complex a) {
        return new Complex(this.RealPart + a.RealPart, this.ImagePart + a.ImagePart);
    }

    Complex ComplexSub(Complex a) {
        return new Complex(this.RealPart - a.RealPart, this.ImagePart - a.ImagePart);
    }

    Complex ComplexMulti(Complex a) {
        return new Complex(this.RealPart * a.RealPart - this.ImagePart * a.ImagePart,
                this.ImagePart * a.RealPart + this.RealPart * a.ImagePart);
    }

    Complex ComplexDiv(Complex a) {
        return new Complex((this.ImagePart * a.ImagePart + this.RealPart * a.RealPart) / (a.ImagePart * a.ImagePart + a.RealPart * a.RealPart), (this.RealPart * a.ImagePart - this.ImagePart * a.RealPart) / (a.ImagePart * a.ImagePart + a.RealPart * a.RealPart));
    }

}
  • 測試代碼
import junit.framework.TestCase;

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

    public void testEquals() {
        assertEquals(true, a.equals(a));
        assertEquals(false, b.equals(a));
    }

    public void testToString() {
        assertEquals("3.0 + 4.0i", a.toString());
        assertEquals("-2.0 - 3.0i", b.toString());
    }

    public void testComplexAdd() {
        assertEquals("1.0 + 1.0i",a.ComplexAdd(b).toString());
        assertEquals("-4.0 - 6.0i",b.ComplexAdd(b).toString());
    }

    public void testComplexSub() {
        assertEquals("5.0 + 7.0i",a.ComplexSub(b).toString());
        assertEquals("0",b.ComplexSub(b).toString());
    }

    public void testComplexMulti() {
        assertEquals("-7.0 + 24.0i",a.ComplexMulti(a).toString());
        assertEquals("6.0 - 17.0i",a.ComplexMulti(b).toString());
    }

    public void testComplexDiv() {
        assertEquals("1.0",a.ComplexDiv(a).toString());
    }
}
  • 測試結果截圖:

    設計

  • 任務五
    • 類圖截圖

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

  • 一、使用Junit時junit標紅
  • 解決方法:點擊小燈泡導入junit類;

  • 二、在進行Junit配置時找不到juint.jarjuint-4.12.jar這兩個包
  • 解決方法:向別人拷貝lib文件夾;

  • 三、如圖,結果同樣卻顯示不符合預期

  • 解決方法:點擊查看對比詳細不一樣,發現使用字符串+" "的方式轉換字符串會多一個空格,改用'String.valueOf( )';

5、碼雲連接

連接

6、參考代碼

  • Intellj IDEA 簡易教程
  • 實驗二《Java面向對象程序設計》的一點說明
相關文章
相關標籤/搜索