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% |