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

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

1、實驗內容及步驟

(一)單元測試

(1)三種代碼

  • 舉例:咱們要在一個MyUtil類中解決一個百分制成績轉成「優、良、中、及格、不及格」五級製成績的功能。
  • 測試結果:

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

TDD的通常步驟:java

  • 明確當前要完成的功能,記錄成一個測試列表
  • 快速完成編寫針對此功能的測試用例
  • 測試代碼編譯不經過
  • 編寫產品代碼
  • 測試經過
  • 對代碼進行重構,並保證測試經過
  • 循環完成全部功能的開發
  • 基於TDD,咱們不會出現過分設計的狀況,需求經過測試用例表達出來了,咱們的產品代碼只要讓測試經過就能夠了。

TDD的編碼節奏:程序員

  • 增長測試代碼,JUnit出現紅條
  • 修改產品代碼
  • JUnit出現綠條,任務完成
  • 測試結果:

(二)面向對象三要素

  • 抽象
    抽象一詞的本意是指人在認識思惟活動中對事物表象因素的捨棄和對本質因素的抽取。抽象是人類認識復瑣事物和現象時常用的思惟工具,抽象思惟能力在程序設計中很是重要,"去粗取精、化繁爲簡、由表及裏、異中求同"的抽象能力很大程度上決定了程序員的程序設計能力。
    抽象就是抽出事物的本質特徵而暫時不考慮他們的細節。對於複雜系統問題人們藉助分層次抽象的方法進行問題求解;在抽象的最高層,可使用問題環境的語言,以歸納的方式敘述問題的解。在抽象的較低層,則採用過程化的方式進行描述。在描述問題解時,使用面向問題和麪向實現的術語。
    程序設計中,抽象包括兩個方面:
    過程抽象
    數據抽象
  • 封裝、繼承與多態
    面向對象(Object-Oriented)的三要素包括:封裝、繼承、多態。
    面向對象的思想涉及到軟件開發的各個方面,貫穿OOA、OOD和OOP的主線正是抽象:
    面向對象分析(OOA):根據抽象關鍵的問題域來分解系統,關注是什麼(what)
    面向對象設計(OOD):是一種提供符號設計系統的面向對象的實現過程,用很是接近問題域術語的方法把系統構形成「現實世界」的對象,關注怎麼作(how),經過模型來實現功能規範
    面向對象編程實現(OOP):在設計的基礎上用編程語言(如Java)編碼
    OOD中建模會用圖形化的建模語言UML(Unified Modeling Language),UML是一種通用的建模語言,咱們實驗中使用umbrello進行建模,Windows中推薦你們使用 StarUML。

過程抽象的結果是函數,數據抽象的結果是抽象數據類型(Abstract Data Type,ADT),類能夠做具備繼承和多態機制的ADT。數據抽象纔是OOP的核心和起源。算法

OO三要素的第一個要素是封裝,封裝就 是將數據與相關行爲包裝在一塊兒以實現信息就隱藏。
封裝實際上使用方法(method)將類的數據隱藏起來,控制用戶對類的修改和訪問數據的程度,從而帶來模塊化(Modularity)和信息隱藏(Information hiding)的好處;接口(interface)是封裝的準確描述手段。
UML建模:
在UML 裏,一個類的屬性能顯示它的名字,類型,初始化值,屬性也能夠顯示private,public,protected。 類的方法能顯示它們的方法名,參數,返回類型,以及方法的private,public,protected屬性。其中:
+表示public
表示protected
-表示private
UML類圖要展現類之間的靜態關係,UML中依賴用帶箭頭的直線表示
UML類圖中繼承的表示法是用一個帶三角的直線指向父類
繼承指一個類的定義能夠基於另一個已經存在的類,即子類基於父類,從而實現父類代碼的重用。既存類稱做基類、超類、父類(base class、super class、parent class),新類稱做派生類、繼承類、子類(derived class、inherited class、child class)。繼承關係表達了」Is a kind of「的關係,稱爲「ISA」關係。繼承的關鍵在於確認子類爲父類的一個特殊類型。
繼承是實現軟件可重用的根基,是提升軟件系統的可擴展性與可維護性的主要途徑。
以封裝爲基礎,繼承能夠實現代碼複用,須要注意的是,繼承更重要的做用是實現多態。
面向對象中容許不一樣類的對象對同一消息作出響應,即同一消息能夠根據發送對象的不一樣而採用多種不一樣的行爲方式,咱們稱此現象爲多態性。Java中,多態是指不一樣的類對象調用同一個簽名的成員方法時將執行不一樣代碼的現象。多態是面向對象程序設計的靈活性和可擴展性的基礎。
編程

(三)設計模式初步

對設計模式示例進行擴充,體會OCP原則和DIP原則的應用,初步理解設計模式。讓系統支持Double類,並在MyDoc類中添加測試代碼代表添加正確,提交測試代碼和運行結的截圖,加上學號水印
設計模式

2、實驗練習:使用TDD的方式設計關實現複數類Complex

  • 必備知識
  • 參考複數運算法則。
  • 設計內容
  • 僞代碼
複數運算:
定義複數
定義構造函數
定義共有方法:加減乘除
  • 產品代碼
public class Complex{
    private double r;
    private double i;

    public Complex(double r, double i) {
        this.r = r;
        this.i = i;
    }

    public static double getRealPart(double r) {
        return r;
    }

    public static double getImagePart(double i) {
        return i;
    }

    public Complex ComplexAdd(Complex a) {
        return new Complex(r + a.r, i + a.i);
    }
    public Complex ComplexSub(Complex a) {
        return new Complex(r - a.r, i - a.i);
    }
    public Complex ComplexMulti(Complex a) {
        return new Complex(r * a.r - i * a.i, r * a.i + i * a.r);
    }
    public Complex ComplexDiv(Complex a) {
        return new Complex((r * a.i + i * a.r)/(a.i * a.i + a.r * a.r), (i * a.i + r * a.r)/(a.i * a.i + a.r * a.r));
    }

    public String toString() {
        String s = " ";
        if (i > 0)
            s =  r + "+" + i + "i";
        if (i == 0)
            s =  r + "";
        if (i < 0)
            s = r + " " + i + "i";
        return s;
    }
}
  • 測試代碼

3、總結與分析

我我的的感覺而言,單元測試提供了一種高效快速的測試代碼正確性的方法,能夠對代碼進行修復和完善,這樣可讓咱們的代碼寫的更好,更加完善,經過邊界狀況,正確狀況的測試也能找出代碼中不正確的地方。一開始不知道怎麼作,參考了關於單元測試。本身有了不少思考,成長了許多。編程語言

相關文章
相關標籤/搜索