20165223 實驗四 Android開發基礎

來源:互聯網
上載者:User

標籤:ati   提示   繼承   方便   linu   tchar   設計   快速   art   

實驗二 物件導向程式設計

目錄
  • 一、實驗報告封面
  • 二、具體實驗內容
    • (一)物件導向程式設計-1 初步掌握單元測試和TDD
    • (二)物件導向程式設計-2 以TDD的方式研究學習StringBuffer
    • (三)物件導向程式設計-3 OCP原則和DIP原則的應用
    • (四)物件導向程式設計-4 以TDD的方式開發一個複數類Complex
    • (五)物件導向程式設計-5 對代碼進行UML類圖建模
  • 三、實驗總結
  • 四、PSP時間
一、實驗報告封面北京電子科技學院(BESTI)

實 驗 報 告

課程 Java程式設計 班級 1652班
姓名 蔡霓 學號 20165223
成績 指導教師 婁嘉鵬
實驗日期 2018年4月16日 實驗密級 非密級
預習程度 已預習 實驗時間 13:45 - 15:25
必修/選修 選修 實驗序號

實驗名稱:物件導向程式設計

實驗內容

1.初步掌握單元測試和TDD

2.理解並掌握物件導向三要素:封裝、繼承、多態

3.初步掌握UML建模

4.熟悉S.O.L.I.D原則

5.瞭解設計模式

實驗要求

1.沒有Linux基礎的同學建議先學習《Linux基礎入門(新版)》和《Vim編輯器》 課程

2.完成實驗、撰寫實驗報告,實驗報告以部落格方式發表在部落格園,注意實驗報告重點是運行結果,遇到的問題(工具尋找,安裝,使用,程式的編輯,調試,運行等)、解決辦法(空洞的方法如“查網路”、“問同學”、“看書”等一律得0分)以及分析(從中可以得到什麼啟示,有什麼收穫,教訓等)。報告可以參考範飛龍老師的指導

3.嚴禁抄襲,有該行為者實驗成績歸零,並附加其他懲罰措施。

4.請大家先在實驗樓中的~/Code目錄中用自己的學號建立一個目錄,代碼和UML圖要放到這個目錄中,中沒有學號的會要求重做,然後跟著下面的步驟練習。

返回目錄

二、具體實驗內容(一)初步掌握單元測試和TDD

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

2.提交最後三個JUnit測試案例(正常情況,錯誤情況,邊界情況)都通過的,上要有畫圖加浮水印,輸入自己的學號

3.本提交點考查JUnit會不會使用,測試案例至少要包含正常情況,錯誤情況,邊界情況的測試

(1)實驗步驟
  • 建立類:MyUtil.java,輸入代碼
  • 建立一個測試案例類:MyUtilTest,輸入代碼

    Java編程時,程式員對類實現的測試叫單元測試。
    我們一般建立一個XXXXTest的類用作類XXXX的測試模組。
    這種先寫測試代碼,然後再寫產品代碼的開發方法叫“測試驅動開發”(TDD)

  • 進行基於TDD的JUnit測試

(2)實驗代碼
  • MyUtil.java
public class MyUtil{    public static String percentage2fivegrade(int grade){        //如果成績小於60,轉成“不及格”        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 "優秀";        //其他,轉成“錯誤”        else            return "錯誤";    }}
  • MyUtilTest
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 testException() {        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));    }}
(3)實驗
  • 增加測試代碼,JUnit出現紅條(顯示2個錯誤)

  • 根據提示修改產品代碼,JUnit出現綠條,任務完成

返回目錄

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

參考積極主動敲代碼,使用JUnit學習Java
以TDD的方式研究學習StringBuffer
提交你的單元測試用例和測試通過的,要加上學號浮水印
測試自己會不會寫JUnit測試案例

(1)實驗步驟
  • 編寫StringBufferDemo
  • 快速編寫測試代碼StringBufferDemoTest
  • TDD運行報錯、更正代碼
  • 出現綠條,成功
(2)實驗代碼
  • StringBufferDemo
public class StringBufferDemo {    public static void main(String [] args){        StringBuffer buffer = new StringBuffer();        buffer.append(‘S‘);        buffer.append("tringBuffer");        System.out.println(buffer.charAt(1));        System.out.println(buffer.capacity());        System.out.println(buffer.indexOf("tring"));        System.out.println("buffer = " + buffer.toString());    }}
  • 測試代碼StringBufferDemoTest
import junit.framework.TestCase;import org.junit.Test;import java.lang.management.BufferPoolMXBean;public class StringBufferDemoTest extends TestCase {    StringBuffer str=new StringBuffer("StringBuffer");    @Test    public void testcharAt (){        assertEquals(‘S‘,str.charAt(0));        assertEquals(‘B‘,str.charAt(6));    }    @Test    public void testcapacity(){        assertEquals(28,str.capacity());    }    @Test    public void testindexof(){        assertEquals(6,str.indexOf("Buffer"));    }    @Test    public void testtoString(){        assertEquals("str:StringBuffer","str:"+str.toString());    }}
(3)實驗

返回目錄

(三)物件導向程式設計-3 OCP原則和DIP原則的應用

參考http://www.cnblogs.com/rocedu/p/4472842.html
對設計模式樣本進行擴充,體會OCP原則和DIP原則的應用,初步理解設計模式
用自己的學號%6進行取餘運算,根據結果(結果是5)進行代碼擴充:
5: 讓系統支援Double類,並在MyDoc類中添加測試代碼錶明添加正確,提交測試代碼和運行結的,加上學號浮水印

(1)實驗步驟
  • 對設計模式樣本進行擴充,擴充出DoubleDoubleFactory
(2)實驗代碼
abstract class Data {    abstract public void DisplayValue();}class Double extends Data{    double value;    Double(){        value=5;    }    public void DisplayValue(){        System.out.println(value);    }}abstract class Factory {    abstract public Data CreateDataObject();}class DoubleFactory extends Factory{    public Data CreateDataObject(){        return new Double();    }}class Document {    Data pd;    Document(Factory pf){        pd = pf.CreateDataObject();    }    public void DisplayData(){        pd.DisplayValue();    }}public class MyDoc {    static Document d;    public static void main(String[] args) {        d = new Document(new DoubleFactory());        d.DisplayData();    }}
(3)實驗

返回目錄

(四)物件導向程式設計-4 以TDD的方式開發一個複數類Complex

參考http://www.cnblogs.com/rocedu/p/6736847.html
任務:以TDD的方式開發一個複數類Complex

(1)實驗步驟
  • 定義屬性並產生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)

(2)實驗代碼
  • Complex
public class Complex {    private double RealPart;    private double ImagePart;    public Complex() {    }    public Complex(double R, double I) {        this.RealPart = R;        this.ImagePart = I;    }    public double getRealPart() {        return RealPart;    }    public void setRealPart(double realPart) {        RealPart = realPart;    }    public double getImagePart() {        return ImagePart;    }    public void setImagePart(double imagePart) {        ImagePart = imagePart;    }    public boolean equals(Object obj) {        if (this == obj) {            return true;        }        if (!(obj instanceof Complex)) {            return false;        }        Complex complex = (Complex) obj;        if (complex.RealPart != ((Complex) obj).RealPart) {            return false;        }        if (complex.ImagePart != ((Complex) obj).ImagePart) {            return false;        }        return true;    }    public String toString() {        String string = "";        if (ImagePart > 0)            string = RealPart + "+" + ImagePart + "i";        if (ImagePart == 0)            string = RealPart + "";        if (ImagePart < 0)            string = RealPart + " " + ImagePart + "i";        return string;    }    Complex ComplexAdd(Complex a) {        return new Complex(RealPart + a.RealPart, ImagePart + a.ImagePart);    }    Complex ComplexSub(Complex a) {        return new Complex(RealPart - a.RealPart, ImagePart - a.ImagePart);    }    Complex ComplexMulti(Complex a) {        return new Complex(RealPart * a.RealPart - ImagePart * a.ImagePart, ImagePart * a.RealPart + RealPart * a.ImagePart);    }    Complex ComplexDiv(Complex a) {        Complex d = new Complex();        d.RealPart = (this.RealPart * a.RealPart + this.ImagePart * a.ImagePart) / (a.RealPart * a.RealPart + a.ImagePart * a.ImagePart);        d.ImagePart = (this.ImagePart * a.RealPart - this.RealPart * a.ImagePart) / (a.RealPart * a.RealPart + a.ImagePart * a.ImagePart);        return d;    }}
  • 測試代碼ComplexTest
import org.junit.*;import static org.junit.Assert.*;public class ComplexTest {    Complex a = new Complex(0, 2);    Complex b = new Complex(2, -1);    @Test    public void testAdd() {        assertEquals("2.0+1.0i", a.ComplexAdd(b).toString());        System.out.println(a.ComplexAdd(b));    }    @Test    public void testSub() {        assertEquals("-2.0+3.0i", a.ComplexSub(b).toString());        System.out.println(a.ComplexSub(b));    }    @Test    public void testMulti() {        assertEquals("2.0+4.0i", a.ComplexMulti(b).toString());        System.out.println(a.ComplexMulti(b));    }    @Test    public void testDiv() {        assertEquals("-0.4+0.8i", a.ComplexDiv(b).toString());        System.out.println(a.ComplexDiv(b));    }}
(3)實驗

返回目錄

(五)物件導向程式設計-5 對代碼進行UML類圖建模

使用WhiteStarUML對實驗二中的代碼(選其一)進行建模,發類圖的,加上學號浮水印。
參考http://www.cnblogs.com/rocedu/p/6736847.html,類圖中至少有兩個類。

(1)實驗步驟
  • 開啟StarUML,選擇對MyDoc.java進行UML類圖建模
  • 注意MyDoc中各變數和方法的名字
(2)實驗

返回目錄

三、實驗總結
  • 遇到的問題

剛開始使用TDD測試代碼的時候還不太熟練,看到出現紅條後一位運行失敗了,仔細參考老師所給教程後得知可以直接在測試代碼上進行修改,只需要看下端提示欄中顯示的錯誤,就能直接點擊跳轉過去,並且按照給出的結論修改代碼即可最終成功。另外還要查缺補漏,將各種可能性都包含在內,才能將代碼進一步完善。

  • 分析與總結

這次實驗蠻難的……涉及到的內容也挺多,主要是新增了單元測試和TDD的使用,從未接觸過有些措手不及,所以剛開始的時候犯了挺多錯誤做了無用功。後來跟著教程瞭解到快速建立測試代碼test的方法,發現IDEA真的很方便啊,增添了測試案例的使用就能更快的找出錯誤的地方,還能自動報錯,直接幫你指出錯誤應該怎麼修改,只需要動動手改正就行。這個實驗考驗了我的思維能力,畢竟要想使自己的代碼顯得完美無缺,就要將方方面面的漏洞都考慮到,再加上測試代碼這個輔助,才能在有效時間裡高效的操作,更正,完善帶密碼。當然以後也希望能用上這個方法對代碼進行檢查,特別是長代碼就更需要機器幫忙識別報錯了。

  • 參考資料
  1. Intellj IDEA 簡易教程-單元測試
  2. 實驗二《Java物件導向程式設計》的一點說明
  3. 積極主動敲代碼,使用JUnit學習Java
  4. 實驗二 Java物件導向程式設計

返回目錄

四、PSP時間
實驗步驟 耗時 百分比
題目分析 1h 10%
思路設計 2h 20%
代碼實現 5h 50%
調試測試 1h 10%
實驗總結 1h 10%

返回目錄

20165223 實驗四 Android開發基礎

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.