20182307 2019-2020-1 《数据结构与面向对象程序设计》实验三报告
20182307 2019-2020-1 《数据结构与面向对象程序设计》实验三报告
课程:《程序设计与数据结构》
班级: 1823
姓名: 陆彦杰
学号:20182307
实验教师:王志强
实验日期:2019年9月23日
必修/选修: 必修
1.实验内容
- 参考《实验二 Java面向对象程序设计》:http://www.cnblogs.com/rocedu/p/6736847.html
实验内容 - 下载安装并使用IDEA,完成下面实验(https://www.cnblogs.com/rocedu/p/6371315.html)
- 初步掌握单元测试和TDD
- 理解并掌握面向对象三要素:封装、继承、多态
- 初步掌握UML建模
- 完成蓝墨云上 (1)-(5)实验
2. 实验过程及结果
提交一:单元测试
-
编写产品代码
-
安装Junit
-
创建测试用例
-
编写测试代码(包含常规、边界、缺陷测试)
-
测试结果
提交二:以 TDD的方式研究学习StringBuffer
-
编写StringBufferDemo程序来研究学习capacity()的容量问题及调用append产生的区别
-
编写StringBufferTest测试用例检验学习成果
提交三:代码扩充
-
学号运算结果为5,让系统支持Double类
-
编写抽象类,扩充代码,并赋予相应数据类型的数值
-
运行结果
提交四:以TDD的方式开发一个复数类Complex
-
编写产品代码
-
编写测试代码
提交五:UML建模
- 选择程序MyComplex与MyComplexTest,并建模
3. 实验过程中遇到的问题和解决过程
-
问题1:StringBufferTest程序中,预测capacity容量与实际容量不同
- 原因分析:
- StringBuffer(String s)可以指定给对象的实体的初始容量为参数字符串s的长度额外再加16个字符
所以a这个包含了12个c的字符串的容量开辟方法,是在其12的长度基础上再加16个字符的容量,即28;而StringBuffer.append的用途是将字符串追加进原先的字符序列,容量是先拓展好的,所以它将遵循capacity的扩容方法继续扩容 - 扩容规律:小于当前容量时,容量不变;大于当前容量,并且小于(现capacity+1)2,则容量变为(现capacity+1)2;大于当前容量,并且大于(现capacity+1)*2,则容量变为用户所设置的容量
- StringBuffer(String s)可以指定给对象的实体的初始容量为参数字符串s的长度额外再加16个字符
- 解决方案:根据扩容规律修改测试数值
- 原因分析:
-
问题2:不理解实验三的意图
-
原因分析:
- 课前还未接触学习类的继承、接口、抽象类等知识概念,所以在代码理解层面上就有困难
- 误以为是要扩展6个程序
- 博客教程的图片无法显示
-
解决方案:在参考了上届学长学姐的博客,加上自己私下的学习后,形成了最终理解:
- 学号%6取余结果决定了扩展的程序
- 定义了两个抽象类Data与Factory,Integer与Double是Data的子类,IntFactory与DoubleFactory是Factory的子类。通俗可理解为,double与int是特殊的数据(data)
- Integer与Double有两个方法分别负责赋值与打印
- IntFactory与DoubleFactory调用抽象类方法CreateDataObject生成符合数据类型的新数值
- Document接受相应Factory生成的数值并打印
-
-
问题3:输出结果与预期结果显示一致,却无法通过测试
- 原因分析:显示似乎是相同的,但实际产品代码中返回的是字符串形式,测试代码测试的是数值
- 解决方案:测试代码中引用toString方法,将数值转为字符串形式
其他(感悟、思考等)
- 可能是课时压缩的关系,老师上课进度很快,任务也比较繁重,需要投入更多的时间自学,不然连演示代码都看不懂,更别提自己设计了