2017-2018-2 20165228 实验二《Java面向对象程序设计》实验报告
相关知识点
三种代码
- 伪代码:注释,与具体编程语言无关
- 产品代码:由伪代码翻译而来的具体编程语言语法相关的语句
- 测试代码:以测试用例来测试产品代码中是否存在bug
测试驱动开发(TDD)
TDD的一般步骤如下: - 明确当前要完成的功能,记录成一个测试列表
- 快速完成编写针对此功能的测试用例
- 测试代码编译不通过(没产品代码呢)
- 编写产品代码
- 测试通过
- 对代码进行重构,并保证测试通过(重构下次实验练习)
- 循环完成所有功能的开发
TDD的编码节奏是: - 增加测试代码,JUnit出现红条
- 修改产品代码
- JUnit出现绿条,任务完成
S.O.L.I.D类设计原则: - SRP(Single Responsibility Principle,单一职责原则)
- OCP(Open-Closed Principle,开放-封闭原则)
- LSP(Liskov Substitusion Principle,Liskov替换原则)
- ISP(Interface Segregation Principle,接口分离原则)
- DIP(Dependency Inversion Principle,依赖倒置原则)
实验内容
(一)面向对象程序设计-1
检查点要求:
- 参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST 完成单元测试的学习
- 提交最后三个JUnit测试用例(正常情况,错误情况,边界情况)都通过的截图,截图上要有画图加水印,输入自己的学号
- 本提交点考查JUnit会不会使用,测试用例至少要包含正常情况,错误情况,边界情况的测试
例子说明:我们要在一个MyUtil类中解决一个百分制成绩转成“优、良、中、及格、不及格”五级制成绩的功能。
码云链接:
相关截图:
(二)面向对象程序设计-2
检查点要求:
- 参考 积极主动敲代码,使用JUnit学习Java (http://www.cnblogs.com/rocedu/p/4837092.html)
以 TDD的方式研究学习StringBuffer - 提交你的单元测试用例和测试通过的截图,截图要加上学号水印
- 测试自己会不会写JUnit测试用例
码云链接:
相关截图:
(三)面向对象程序设计-3
检查点要求:
- 参考实验二 Java面向对象程序设计对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理解设计模式
- 用自己的学号%6进行取余运算,根据结果进行代码扩充:
0:让系统支持Byte类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
1:让系统支持Short类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
2:让系统支持Boolean类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
3:让系统支持Long类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
4:让系统支持Float类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
5:让系统支持Double类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
码云链接:
相关截图:
(四)面向对象程序设计-4
检查点要求:
- 提交:单元测试代码和运行成功截图及码云上代码链接,截图要加上学号水印
- 任务:以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)
码云链接:
相关截图:
(五)面向对象程序设计-5
检查点要求:
- 用StarUML对实验二中的代码进行建模,发类图的截图,加上学号水印
- 类图中只少两个类
- 类,继承,接口实现,组合在UML中表达
相关截图:
实验中遇到的问题
- 问题1:在第四个提交点用测试用例来调试bug时,出现了下图中的问题:
当时计算的是11/25,结果应该为0.44,然而计算的结果为0.43999999999999995,这让我很困惑 - 解决方法:经过认真思考和相关问题查找后,也未能解决此问题。使用其他测试用例调试都通过
- 问题2:在第二个提交点写的程序中,我发现
buffer.append('S'); //调用方法append,缓存char型
buffer.append("tringBuffer"); //调用方法append,缓存String型
和
buffer.append("StringBuffer")
打印效果一样,区别是什么?
- 解决方法:通过多次尝试,前者存储的两个数据存在于不同的两个地址内存,只是显示时拼接在一起