实验二《面向对象程序设计》_实验报告
实验二《面向对象程序设计》_实验报告
一、实验前期预习准备
Junit的安装和配置
- 选择
File->Setting
打开设置对话框,在设置对话框中选择Plugins
, 单击Install JetBrains plugin...
按钮打开插件安装界面: - 在插件安装对话框的搜索中输入
junit
,单击JunitGenerator V2.0,单击右边绿色的Install1
按钮安装: - 结果如下
二、实验内容与主要步骤
提交点1:测试MyUtil类
- 实验要求
- 参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST
- 参考http://www.cnblogs.com/rocedu/p/6736847.html
- 提交最后三个测试用例都通过的截图,截图上要有画图加水印,输入自己的学号。
- 实验过程
- 产品代码
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,转成“错误”elsereturn "错误";} }
- 测试代码
import org.junit.Test; import junit.framework.TestCase; public class MyUtilTest extends TestCase {@Testpublic void testNormal() {assertEquals("不及格", MyUtil.percentage2fivegrade(55));assertEquals("及格", MyUtil.percentage2fivegrade(65));assertEquals("中等", MyUtil.percentage2fivegrade(75));assertEquals("良好", MyUtil.percentage2fivegrade(85));assertEquals("优秀", MyUtil.percentage2fivegrade(95));}@Testpublic void testExceptions() {assertEquals("错误", MyUtil.percentage2fivegrade(-55));assertEquals("错误", MyUtil.percentage2fivegrade(105));}@Testpublic 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));} }
- 运行测试结果
提交点2:以TDD的方式研究学习StringBuffer
- 实验要求
- 参考 积极主动敲代码,使用JUnit学习Java (http://www.cnblogs.com/rocedu/p/4837092.html)
- 参考http://www.cnblogs.com/rocedu/p/6736847.html
- 以 TDD的方式研究学习StringBuffer,提交你的单元测试用例和测试通过的截图,截图要加上学号水印。
- 实验过程
- 产品代码
public class StringBufferDemo {public static void main(String [] args){StringBuffer buffer = new StringBuffer(20);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());System.out.println(buffer.length());} }
- 测试代码
import junit.framework.TestCase; import org.junit.Test; public class StringBufferDemoTest extends TestCase {StringBuffer a = new StringBuffer("StringBuffer");StringBuffer b = new StringBuffer("StringBufferStringBuffer");StringBuffer c = new StringBuffer("StringBufferStringBufferStringBuffer");@Testpublic void testcharAt() throws Exception {assertEquals('t', a.charAt(1));assertEquals('g', a.charAt(5));assertEquals('r', a.charAt(11));}@Testpublic void testcapacity() throws Exception {assertEquals(28, a.capacity());assertEquals(40, b.capacity());assertEquals(52, c.capacity());}@Testpublic void testlength() throws Exception {assertEquals(12, a.length());assertEquals(24, b.length());assertEquals(36, c.length());}@Testpublic void testindexOf() throws Exception {assertEquals(0, a.indexOf("Str"));assertEquals(5, b.indexOf("gBu"));assertEquals(8, c.indexOf("ffer"));} }
- 实验结果截图
提交点3:对设计模式示例进行扩充
- 实验要求
- 参考http://www.cnblogs.com/rocedu/p/6736847.html
- 对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理解设计模式
- 用自己的学号%6进行取余运算,根据结果进行代码扩充:
- 0: 让系统支持Byte类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
- 1: 让系统支持Short类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
- 2: 让系统支持Boolean类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
- 3: 让系统支持Long类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
- 4: 让系统支持Float类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
- 5: 让系统支持Double类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
- 实验代码
abstract class Data {abstract public void DisplayValue();
}
class Integer extends Data {int value;Integer() {value=20175226%6;}public void DisplayValue(){System.out.println (value);}
}
class Byte extends Data {byte value;Byte() {value=20175226%6;}public void DisplayValue(){System.out.println (value);}
}
class Short extends Data {short value;Short() {value=20175226%6;}public void DisplayValue(){System.out.println (value);}
}
class Boolean extends Data {boolean value;Boolean() {value=20175226%6==4;}public void DisplayValue(){System.out.println (value);}
}
class Long extends Data {long value;Long() {value=20175226;}public void DisplayValue(){System.out.println (value);}
}
class Double extends Data {double value;Double() {value=20175226%6;}public void DisplayValue(){System.out.println (value);}
}
class Float extends Data {float value;Float() {value=20175226%6;}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 ByteFactory extends Factory {public Data CreateDataObject(){return new Byte();}
}
class ShortFactory extends Factory {public Data CreateDataObject(){return new Short();}
}
class BoolenFactory extends Factory {public Data CreateDataObject(){return new Boolean();}
}
class LongFactory extends Factory {public Data CreateDataObject(){return new Long();}
}
class DoubletFactory extends Factory {public Data CreateDataObject(){return new Double();}
}
class FloatFactory extends Factory {public Data CreateDataObject(){return new Float();}
}
//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 IntFactory());d.DisplayData();d = new Document(new ByteFactory());d.DisplayData();d = new Document(new ShortFactory());d.DisplayData();d = new Document(new BoolenFactory());d.DisplayData();d = new Document(new LongFactory());d.DisplayData();d = new Document(new DoubletFactory());d.DisplayData();d = new Document(new FloatFactory());d.DisplayData();}
}
- 实验结果
提交点4:以TDD的方式开发一个复数类Complex
- 实验要求
- 方式开发一个复数类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)
- 产品代码
public class Complex {// 定义属性并生成getter,setterdouble RealPart;double ImagePart;// 定义构造函数public Complex(){RealPart = 0;ImagePart = 1;}public Complex(double R,double I){ImagePart = I;RealPart = R;}//Override Objectpublic 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) {double b=0,c=0;b = RealPart+a.RealPart;c = ImagePart+a.ImagePart;System.out.println("("+RealPart+"+"+ImagePart+"i) + ("+a.RealPart+"+"+a.ImagePart+") = "+b+"+"+c+"i");return new Complex(b,c);}Complex ComplexSub(Complex a) {double b=0,c=0;b = RealPart-a.RealPart;c = ImagePart-a.ImagePart;System.out.println("("+RealPart+"+"+ImagePart+"i) - ("+a.RealPart+"+"+a.ImagePart+") = "+b+"+"+c+"i");return new Complex(b,c);}Complex ComplexMulti(Complex a) {double b=0,c=0;b = RealPart*a.RealPart;c = ImagePart*a.ImagePart;System.out.println("("+RealPart+"+"+ImagePart+"i) * ("+a.RealPart+"+"+a.ImagePart+") = "+b+"+"+c+"i");return new Complex(b,c);}Complex ComplexDiv(Complex a) {if(a.RealPart==0||a.ImagePart==0) {System.out.println("被除数不能为0,错误");return new Complex();}double d = Math.sqrt(a.RealPart*a.RealPart)+Math.sqrt(a.ImagePart*a.ImagePart);double b=0,c=0;b = (RealPart*a.RealPart+ImagePart*a.ImagePart)/d;c = Math.round((RealPart*a.ImagePart-ImagePart*a.RealPart)/d);System.out.println("("+RealPart+"+"+ImagePart+"i) / ("+a.RealPart+"+"+a.ImagePart+") = "+b+"+"+c+"i");return new Complex(b,c);}
}
- 测试代码
import junit.framework.TestCase;
import org.junit.Test;
public class ComplexTest extends TestCase {Complex complex = new Complex(1, 1);@Testpublic void testAdd() {assertEquals(new Complex(3.0, 3.0), complex.ComplexAdd(new Complex(2.0, 2.0)));}@Testpublic void testSub() {assertEquals(new Complex(-5.0, -2.0), complex.ComplexSub(new Complex(6.0, 3.0)));}@Testpublic void testMulti() {assertEquals(new Complex(3.0, 2.0), complex.ComplexMulti(new Complex(3.0, 2.0)));}@Testpublic void testDiv() {assertEquals(new Complex(1.0, 1.0), complex.ComplexDiv(new Complex(1.0, 1.0)));assertEquals(new Complex(0.0, 0.0), complex.ComplexDiv(new Complex(1.0, 0.0)));//边缘测试}
}
- 结果截图
提交点5:类图
实验中碰到的问题
- 问题1:在第二个提交点写测试类时,测试
charAt
方法时我写的语句是
public void testcharAt() throws Exception {assertEquals("t", a.charAt(1));assertEquals("g", a.charAt(5));assertEquals("r", a.charAt(11));}
结果发现怎么样测试都是红色条,不通过。
- 问题1解决过程:经过反复测试我将测试的代码换成了下面这样才能通过
public void testcharAt() throws Exception {assertEquals('t', a.charAt(1));assertEquals('g', a.charAt(5));assertEquals('r', a.charAt(11));}
这个问题体现了一些我们的细节,像两个字符串比较一样,虽然" s "
和' s '
看起来内容一模一样但事实上两者比较起来两者之间有很大差异。两者占用的内存空间就不一样至少会有"\0".所以显而易见字符可以被视为长度为1的字符串这个想法是错误的。
(代码托管)[https://gitee.com/wpyzka/20175226/tree/master/src/shiyan2]
步骤 | 耗时 | 百分比 |
---|---|---|
需求分析 | 10min | 5.7% |
设计 | 25min | 14.7% |
代码实现 | 80min | 47.1% |
测试 | 10min | 5.7% |
分析总结 | 45min | 26.5% |
转载于:https://www.cnblogs.com/20175226wpy/p/10733543.html
实验二《面向对象程序设计》_实验报告相关推荐
- 20175212童皓桢 Java实验二-面向对象程序设计实验报告
20175212童皓桢 Java实验二-面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设 ...
- matlab的程序设计实验报告答案,实验二 MATLAB程序设计(含实验报告).doc
实验二 MATLAB程序设计(含实验报告) 实验二 MATLAB程序设计 实验目的 1.掌握利用if语句实现选择结构的方法. 2.掌握利用switch语句实现多分支选择结构的方法. 3.掌握利用for ...
- 熟悉java环境实验报告_2018-2019-2 20175324实验二面向对象程序设计《Java开发环境的熟悉》实验报告...
面向对象程序设计-3 实验要求: 参考>http://www.cnblogs.com/rocedu/p/6736847.html 对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理 ...
- JAVA实验二 面向对象程序设计
一.实验目的 通过编程和上机实验,掌握类和构造方法的定义及创建对象的方法,掌握类的封装及继承原则,正确使用重载和覆盖等多态概念设计可复用方法,熟悉包.接口的使用方法,掌握面向对象的程序设计方法. 二. ...
- 实验二 面向对象程序设计
一.实验目的 1.掌握类的声明.对象的创建. 2.掌握方法的定义和调用.方法的重载. 3.掌握构造函数的使用. 4.掌握类的继承.掌握隐藏与重写(覆盖). 5.掌握抽象类与接口. 二.实验内容 1. ...
- java实验报告系统分析怎么写_20155218 《Java程序设计》实验二(Java面向对象程序设计)实验报告...
20155218 <Java程序设计>实验二(Java面向对象程序设计)实验报告 一.实验内容及步骤 (一)单元测试 主要学习安装和使用junit来测试编写的程序,并学习以TDD(Test ...
- java面向对象程序基础实验_20165115 实验二《Java面向对象程序设计》实验报告
20165115 实验二 面向对象程序设计 这一次的实验,老师按照实验内容的不同将实验分成了五个部分进行.五个部分的侧重难易都有区别,实验报告中的叙述也会有所区别. 第一部分 先上实验结果截图: 这一 ...
- 20155328 《Java程序设计》 实验二(Java面向对象程序设计) 实验报告
20155328 <Java程序设计> 实验二(Java面向对象程序设计) 实验报告 单元测试 一.单元测试和TDD 编程时需理清思路,将编程需求等想好,再开始编.此部分可用伪代码实现. ...
- 20145207《Java程序设计》实验二(Java面向对象程序设计)实验报告
<Java程序设计>实验二(Java面向对象程序设计)实验报告 目录 改变 Java面向对象程序设计实验要求 实验成果 课后思考 改变 看了下之前实验二的整体,很搞笑,大图+代码,没了.. ...
- c语言面向对象实验报告,《面向对象程序设计》实验报告1.doc
<面向对象程序设计>实验报告1 琼州学院 实 验 报 告 课程名称:面向对象程序设计 开课学期:_2014-2015(1)_ 院(部):电子信息工程学院 开课实验室:数字媒体技术实验室 学 ...
最新文章
- 解决百度网盘(百度云)分享链接不存在失效、分享的文件已经被取消的问题
- 【转载】微服务,我们需要哪些基础框架?
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 排版:移除默认的列表样式
- esp8266接收到的数据如何存放到数组中_Java中HashMap的实现原理
- python怎么编辑文件_如何使用python中的方法对文件进行修改文件名
- 远程声控系统(MATLAB代码见CSDN资源)
- Nike Air Jordan Sneakers
- android tcp socket框架_socket网络编程知识梳理,让你学会造轮子的能力
- 中国式离婚中,林与宋离婚成为定局的时刻
- 邵阳学院学校云认证码_2021年湖南对口单招升学学校排名
- 浅析openvn redirect-gateway组建公司专网的使用
- 7大浏览器颜值代表,谁才是真正的浏览器颜值之王呢?
- 适合计算机中职生见到打拼音的软件,中职计算机基础教案设计(18页)-原创力文档...
- 诺奖得主:2030年中国帕金森疾病患者将超过美国
- 大数据 (三) BI报表系统 superset 2 制作表格
- Primavera P6打补丁patch,从19.12.0.0升级到19.12.11.0
- 淘宝联盟分享赚怎么赚钱?
- 在word使用中,如何将word中的单独一页设置成横向或纵向
- 初中计算机软件课后反思,初中信息技术总结性教学反思
- 数据库存储列表(List)/数组(Array)型数据的两种方式