標籤: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)實驗步驟
(2)實驗代碼
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 "錯誤"; }}
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出現綠條,任務完成
返回目錄
(二)以TDD的方式研究學習StringBuffer
參考積極主動敲代碼,使用JUnit學習Java
以TDD的方式研究學習StringBuffer
提交你的單元測試用例和測試通過的,要加上學號浮水印
測試自己會不會寫JUnit測試案例
(1)實驗步驟
- 編寫
StringBufferDemo
類
- 快速編寫測試代碼
StringBufferDemoTest
類
- TDD運行報錯、更正代碼
- 出現綠條,成功
(2)實驗代碼
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)實驗步驟
- 對設計模式樣本進行擴充,擴充出
Double
和DoubleFactory
(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)實驗代碼
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; }}
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真的很方便啊,增添了測試案例的使用就能更快的找出錯誤的地方,還能自動報錯,直接幫你指出錯誤應該怎麼修改,只需要動動手改正就行。這個實驗考驗了我的思維能力,畢竟要想使自己的代碼顯得完美無缺,就要將方方面面的漏洞都考慮到,再加上測試代碼這個輔助,才能在有效時間裡高效的操作,更正,完善帶密碼。當然以後也希望能用上這個方法對代碼進行檢查,特別是長代碼就更需要機器幫忙識別報錯了。
- Intellj IDEA 簡易教程-單元測試
- 實驗二《Java物件導向程式設計》的一點說明
- 積極主動敲代碼,使用JUnit學習Java
- 實驗二 Java物件導向程式設計
返回目錄
四、PSP時間
實驗步驟 |
耗時 |
百分比 |
題目分析 |
1h |
10% |
思路設計 |
2h |
20% |
代碼實現 |
5h |
50% |
調試測試 |
1h |
10% |
實驗總結 |
1h |
10% |
返回目錄
20165223 實驗四 Android開發基礎