20165327《Java程序設計》實驗二 《Java面向對象程序設計》實驗報告html
##實驗二 《Java面向對象程序設計》 ###1、實驗報告封面 課程:Java程序設計 班級:1653 姓名:楊靖濤 學號:20165327編程
指導教師:婁嘉鵬 實驗日期:2018.4.15設計模式
實驗時間:15:35 - 17:50 實驗序號:二數組
實驗名稱:Java面向對象程序設計網絡
提交最後三個測試用例都經過的截圖,截圖上要有畫圖加水印,輸入本身的學號。 實驗要求: 1.沒有Linux基礎的同窗建議先學習《Linux基礎入門(新版)》《Vim編輯器》 課程; 2.完成實驗、撰寫實驗報告,注意實驗報告重點是運行結果,遇到的問題(工具查找,安裝,使用,程序的編輯,調試,運行等)、解決辦法(空洞的方法如「查網絡」、「問同窗」、「看書」等一概得0分)以及分析(從中能夠獲得什麼啓示,有什麼收穫,教訓等); 3.實驗報告中統計本身的PSP(Personal Software Process)時間; 4.嚴禁抄襲。 ###實驗內容與步驟編程語言
參考 http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST 參考http://www.cnblogs.com/rocedu/p/6736847.html 提交點一:在一個MyUtil類中解決一個百分制成績轉成「優、良、中、及格、不及格」五級製成績的功能。編輯器
首先要明確程序要實現什麼功能?要實現這些功能須要哪些操做? 僞代碼從意圖層面來解決問題。最終,僞代碼是產品代碼最天然的、最好的註釋。所以,能夠利用僞代碼來明確以上這些要求。 注:僞代碼與具體編程語言無關,不要寫與具體編程語言語法相關的語句。ide
用Java語言翻譯僞代碼,生成產品代碼函數
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 "錯誤"; } }
2.給新建好的test設置環境變量,也就是讓IDEA知道這裏存的是測試代碼。在test上右擊而後MakeDirectoryas以後選擇testSourceRoot,這樣就把這個文件夾設置成了存放測試代碼的源文件的文件夾:工具
3.以下圖:建立測試類,在test目錄中編寫測試代碼MyUtilTest,其中的測試用例分爲測試正常testNormal測試邊界testBoundary測試異常testException三部分:
可利用如下測試代碼對寫成的產品代碼進行測試,檢查是否有不完善的地方。
測試代碼
import junit.framework.TestCase; import org.junit.Test; import static org.junit.Assert.*; 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(-58)); assertEquals("錯誤",MyUtil.percentage2fivegrade(118)); } @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)); } }
運行截圖:
提交點二:以TDD的方式研究學習StringBuffer
對老師給的<kbd>StringBufferDemo</kbd>產品代碼進行改寫,並寫出<kbd>StringBuffer</kbd>中的<kbd>charAt</kbd>、<kbd>length</kbd>、<kbd>capcity</kbd>這幾個方法對應的測試代碼進行測試。
按照老師給的參考代碼中StringBufferDemo中調用的方法,將其更改成個人產品代碼。
產品代碼:
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); } }
<kbd> charAt(int i)</kbd>:返回此序列中指定索引處的 char 值。第一個 char 值在索引 0 處,第二個在索引 1 處,依此類推,這相似於數組索引。
<kbd>indexOf(String s)</kbd>:返回輸入的子字符串的第一個字母在母字符串的位置。
<kbd> capacity()</kbd>:返回當前容量。容量指可用於最新插入的字符的存儲量,超過這一容量就須要再次進行分配。
<kbd>length()</kbd>:返回子浮窗的長度。
瞭解以上方法以後,須要編寫測試代碼對它們進行測試。 測試代碼:
import junit.framework.TestCase; import org.junit.Test; public class StringBufferDemoTest extends TestCase { StringBuffer string1 = new StringBuffer("Students"); StringBuffer string2 = new StringBuffer("Students of class 1653"); StringBuffer string3 = new StringBuffer("Students of class 1653 and class 1652"); @Test public void testCharAt() throws Exception{ assertEquals('t',string1.charAt(1)); assertEquals(' ',string2.charAt(8)); assertEquals('1',string3.charAt(18)); } @Test public void testCapacity() throws Exception{ assertEquals(24,string1.capacity()); assertEquals(38,string2.capacity()); assertEquals(53,string3.capacity()); } @Test public void testindexOf() throws Exception{ assertEquals(1, string1.indexOf("tud")); assertEquals(8, string2.indexOf(" of")); assertEquals(18, string3.indexOf("1653")); } @Test public void testlength() throws Exception{ assertEquals(8, string1.length()); assertEquals(22, string2.length()); assertEquals(37, string3.length()); } }
運行截圖
提交點三: 參考(http://www.cnblogs.com/rocedu/p/4472842.html)
參考http://www.cnblogs.com/rocedu/p/6736847.html
對設計模式示例進行擴充,體會OCP原則和DIP原則的應用,初步理解設計模式 用本身的學號%6進行取餘運算,根據結果進行代碼擴充: 3: 讓系統支持Long類,並在MyDoc類中添加測試代碼代表添加正確,提交測試代碼和運行結的截圖,加上學號水印 代碼:
abstract class Data { abstract public void DisplayValue(); } class Integer extends Data { int value; Integer() { value=100; } public void DisplayValue(){ System.out.println (value); } } class Long extends Data { int value; Long() { value=20165327; } 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(); } } class LongFactory extends Factory { public Data CreateDataObject(){ return new Long(); } } //Client classes class Document { Data pd; Document(Factory pf){ pd = pf.CreateDataObject(); } public void DisplayData(){ pd.DisplayValue(); } } //Test class public class MyDoc { static Document d; public static void main(String[] args) { d = new Document(new LongFactory()); d.DisplayData(); } }
運行截圖
提交點四 提交:單元測試代碼和運行成功截圖及碼雲上代碼連接,截圖要加上學號水印
參考http://www.cnblogs.com/rocedu/p/6736847.html
任務:以TDD的方式開發一個複數類Complex,要求以下:
// 定義屬性並生成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)
代碼:
import junit.framework.TestCase; import org.junit.Test; public class ComplexTest extends TestCase { Complex a = new Complex(5.0, 6.0); Complex b = new Complex(-3.0, 4.0); @Test public void testgetRealPart() { assertEquals(5.0,a.getRealPart()); assertEquals(-3.0,b.getRealPart()); } @Test public void testgetImagePart() { assertEquals(6.0,a.getImagePart()); assertEquals(4.0,b.getImagePart()); } @Test public void testtoString() { assertEquals("Complex{RealPart=5.0, ImagePart=6.0}",a.toString()); assertEquals("Complex{RealPart=-3.0, ImagePart=4.0}",b.toString()); } @Test public void testequals() { assertEquals(false,a.equals(b)); Complex c = new Complex(a.getRealPart(),a.getImagePart()); assertEquals(true,a.equals(c)); } @Test public void testComplexAdd() { assertEquals(2.0,a.ComplexAdd(b).getRealPart()); assertEquals(10.0,a.ComplexAdd(b).getImagePart()); } @Test public void testComplexSub() { assertEquals(8.0,a.ComplexSub(b).getRealPart()); assertEquals(2.0,a.ComplexSub(b).getImagePart()); } @Test public void testComplexMulti() { assertEquals(-39.0,a.ComplexMulti(b).getRealPart()); assertEquals(2.0,a.ComplexMulti(b).getImagePart()); } @Test public void testComplexDiv() { assertEquals(0.36,a.ComplexDiv(b).getRealPart()); assertEquals(-1.52,a.ComplexDiv(b).getImagePart()); } }
運行截圖
提交點五 使用WhiteStarUML對實驗二中的代碼進行建模,發類圖的截圖,加上學號水印。 參考http://www.cnblogs.com/rocedu/p/6736847.html
提交點五 使用WhiteStarUML對實驗二中的代碼進行建模,發類圖的截圖,加上學號水印。 參考http://www.cnblogs.com/rocedu/p/6736847.html
類圖中只少兩個類。
實驗時間分配
步驟 | 耗時 | 百分比 |
---|---|---|
需求分析 | 20 | 14.3% |
設計 | 50 | 35.7% |
代碼實現 | 30 | 21.4% |
測試 | 20 | 14.3% |
分析總結 | 20 | 14.3% |