1. 程式人生 > 其它 >20202307 實驗三 《面向物件程式設計》實驗報告

20202307 實驗三 《面向物件程式設計》實驗報告

20202307 2021-2022-1 《資料結構與面向物件程式設計》實驗三報告

課程:《程式設計與資料結構》
班級: 2023
姓名: 範宇涵
學號:20202307
實驗教師:王志強
實驗日期:2021年10月7日
必修/選修: 必修

1.實驗內容

參考《實驗二 Java面向物件程式設計》:http://www.cnblogs.com/rocedu/p/6736847.html
實驗內容

下載安裝並使用IDEA,完成下面實驗(https://www.cnblogs.com/rocedu/p/6371315.html)。

  • 初步掌握單元測試和TDD

  • 理解並掌握面向物件三要素:封裝、繼承、多型

  • 初步掌握UML建模

  • 完成藍墨雲上 (1)-(5)實驗。

(1)參考http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST 完成單元測試的學習

(2)參考http://www.cnblogs.com/rocedu/p/4837092.html,以TDD的方式研究學習StringBuffer

(3)參考https://www.cnblogs.com/rocedu/p/4472842.html,對設計模式示例進行擴充,體會OCP原則和DIP原則的應用,初步理解設計模式

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

(5)使用StarUML對實驗二中的程式碼進行建模

2. 實驗過程及結果

2.1單元測試

MyUtil.java

package Exp3_1;

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

MyUtilTest.java

package Exp3_1;

import org.junit.Assert;
import org.junit.Test;

/**
 * @author 20202307
 */
public class MyUtilTest {
    @Test
    public void testNormal() {
        Assert.assertEquals("不及格", MyUtil.percentage2fivegrade(55));
        Assert.assertEquals("及格", MyUtil.percentage2fivegrade(65));
        Assert.assertEquals("中等", MyUtil.percentage2fivegrade(75));
        Assert.assertEquals("良好", MyUtil.percentage2fivegrade(85));
        Assert.assertEquals("優秀", MyUtil.percentage2fivegrade(95));
    }

    @Test
    public void testExceptions() {
        Assert.assertEquals("錯誤", MyUtil.percentage2fivegrade(-55));
        Assert.assertEquals("錯誤", MyUtil.percentage2fivegrade(105));
    }

    @Test
    public void testBoundary() {
        Assert.assertEquals("不及格", MyUtil.percentage2fivegrade(0));
        Assert.assertEquals("及格", MyUtil.percentage2fivegrade(60));
        Assert.assertEquals("中等", MyUtil.percentage2fivegrade(70));
        Assert.assertEquals("良好", MyUtil.percentage2fivegrade(80));
        Assert.assertEquals("優秀", MyUtil.percentage2fivegrade(90));
        Assert.assertEquals("優秀", MyUtil.percentage2fivegrade(100));
    }
}

2.2以TDD的方式研究學習StringBuffer

StringBufferDemo.java

MyUtilTest.java

2.3對設計模式示例進行擴充,體會OCP原則和DIP原則的應用

MyDoc.java

2.4以TDD的方式開發一個複數類Complex

Complex.java

ComplexTest.java

2.5對上一實驗程式碼進行建模

3. 實驗過程中遇到的問題和解決過程

  • 問題1:控制檯輸出中文亂碼
  • 問題1解決方案:在IDEA安裝目錄下找到idea.exe檔案,編輯檔案,在檔案內容的末尾新增-Dfile.encoding=UTF-8

找到專案目錄下的.idea的資料夾,開啟檔案encodings.xml,將其中除UTF-8外的程式碼刪除。

執行成功!!

其他(感悟、思考等)

隨著課程學習不斷深入,需要掌握的知識的深度和難度都在增加。本次實驗過程中可謂“一步一個坎”,程式碼看似完全正確,看起來與標準示例也相差無兩,但執行起來總是不斷地報錯,一個又一個提示執行錯誤的彈出框讓人倍受折磨。明明是完全根據教程的規範步驟操作,可IDEA給出的反應總是不按套路出牌。比如中文亂碼的問題,我按照各個網站的帖子試了很多種方法,才終於解決掉這個棘手的問題。每一步的操作、每一句程式碼的編寫都需要充分理解操作背後的原理,真正將知識研習透徹,闖過提示錯誤的一個個難關,才能走向最後的勝利。
  

參考資料