实验二《面向对象程序设计》_实验报告

一、实验前期预习准备

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

实验二《面向对象程序设计》_实验报告相关推荐

  1. 20175212童皓桢 Java实验二-面向对象程序设计实验报告

    20175212童皓桢 Java实验二-面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设 ...

  2. matlab的程序设计实验报告答案,实验二 MATLAB程序设计(含实验报告).doc

    实验二 MATLAB程序设计(含实验报告) 实验二 MATLAB程序设计 实验目的 1.掌握利用if语句实现选择结构的方法. 2.掌握利用switch语句实现多分支选择结构的方法. 3.掌握利用for ...

  3. 熟悉java环境实验报告_2018-2019-2 20175324实验二面向对象程序设计《Java开发环境的熟悉》实验报告...

    面向对象程序设计-3 实验要求: 参考>http://www.cnblogs.com/rocedu/p/6736847.html 对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理 ...

  4. JAVA实验二 面向对象程序设计

    一.实验目的 通过编程和上机实验,掌握类和构造方法的定义及创建对象的方法,掌握类的封装及继承原则,正确使用重载和覆盖等多态概念设计可复用方法,熟悉包.接口的使用方法,掌握面向对象的程序设计方法. 二. ...

  5. 实验二 面向对象程序设计

    一.实验目的 1.掌握类的声明.对象的创建. 2.掌握方法的定义和调用.方法的重载. 3.掌握构造函数的使用. 4.掌握类的继承.掌握隐藏与重写(覆盖). 5.掌握抽象类与接口. 二.实验内容 1. ...

  6. java实验报告系统分析怎么写_20155218 《Java程序设计》实验二(Java面向对象程序设计)实验报告...

    20155218 <Java程序设计>实验二(Java面向对象程序设计)实验报告 一.实验内容及步骤 (一)单元测试 主要学习安装和使用junit来测试编写的程序,并学习以TDD(Test ...

  7. java面向对象程序基础实验_20165115 实验二《Java面向对象程序设计》实验报告

    20165115 实验二 面向对象程序设计 这一次的实验,老师按照实验内容的不同将实验分成了五个部分进行.五个部分的侧重难易都有区别,实验报告中的叙述也会有所区别. 第一部分 先上实验结果截图: 这一 ...

  8. 20155328 《Java程序设计》 实验二(Java面向对象程序设计) 实验报告

    20155328 <Java程序设计> 实验二(Java面向对象程序设计) 实验报告 单元测试 一.单元测试和TDD 编程时需理清思路,将编程需求等想好,再开始编.此部分可用伪代码实现. ...

  9. 20145207《Java程序设计》实验二(Java面向对象程序设计)实验报告

    <Java程序设计>实验二(Java面向对象程序设计)实验报告 目录 改变 Java面向对象程序设计实验要求 实验成果 课后思考 改变 看了下之前实验二的整体,很搞笑,大图+代码,没了.. ...

  10. c语言面向对象实验报告,《面向对象程序设计》实验报告1.doc

    <面向对象程序设计>实验报告1 琼州学院 实 验 报 告 课程名称:面向对象程序设计 开课学期:_2014-2015(1)_ 院(部):电子信息工程学院 开课实验室:数字媒体技术实验室 学 ...

最新文章

  1. 解决百度网盘(百度云)分享链接不存在失效、分享的文件已经被取消的问题
  2. 【转载】微服务,我们需要哪些基础框架?
  3. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 排版:移除默认的列表样式
  4. esp8266接收到的数据如何存放到数组中_Java中HashMap的实现原理
  5. python怎么编辑文件_如何使用python中的方法对文件进行修改文件名
  6. 远程声控系统(MATLAB代码见CSDN资源)
  7. Nike Air Jordan Sneakers
  8. android tcp socket框架_socket网络编程知识梳理,让你学会造轮子的能力
  9. 中国式离婚中,林与宋离婚成为定局的时刻
  10. 邵阳学院学校云认证码_2021年湖南对口单招升学学校排名
  11. 浅析openvn redirect-gateway组建公司专网的使用
  12. 7大浏览器颜值代表,谁才是真正的浏览器颜值之王呢?
  13. 适合计算机中职生见到打拼音的软件,中职计算机基础教案设计(18页)-原创力文档...
  14. 诺奖得主:2030年中国帕金森疾病患者将超过美国
  15. 大数据 (三) BI报表系统 superset 2 制作表格
  16. Primavera P6打补丁patch,从19.12.0.0升级到19.12.11.0
  17. 淘宝联盟分享赚怎么赚钱?
  18. 在word使用中,如何将word中的单独一页设置成横向或纵向
  19. 初中计算机软件课后反思,初中信息技术总结性教学反思
  20. 数据库存储列表(List)/数组(Array)型数据的两种方式

热门文章

  1. Keepalive User Guide for gRpc Core(and dependents)
  2. 口布杯花的60种叠法_史上最全的口布花折法教程,简单实用!超美呦~
  3. 大学生访谈计算机教师,职业生涯人物访谈报告,教师(共10篇)
  4. 对象及变量的并发访问(案例加总结)--学习笔记
  5. 博文视点译者招募令!
  6. 《遥感原理与应用》总结——遥感图像自动识别分类
  7. PATA1023_大整数运算(难度:⭐️⭐️)
  8. MyEclipse 下载
  9. AGV与电梯交互系统设计
  10. Ubuntu系统升级及软件管理相关命令