20182307 2019-2020-1 《数据结构与面向对象程序设计》实验三报告

20182307 2019-2020-1 《数据结构与面向对象程序设计》实验三报告

课程:《程序设计与数据结构》
班级: 1823
姓名: 陆彦杰
学号:20182307
实验教师:王志强
实验日期:2019年9月23日
必修/选修: 必修

1.实验内容

2. 实验过程及结果

提交一:单元测试

  • 编写产品代码
    1

  • 安装Junit
    4

  • 创建测试用例
    5

  • 编写测试代码(包含常规、边界、缺陷测试)
    2

  • 测试结果
    3

提交二:以 TDD的方式研究学习StringBuffer

  • 编写StringBufferDemo程序来研究学习capacity()的容量问题及调用append产生的区别
    6

  • 编写StringBufferTest测试用例检验学习成果
    7

提交三:代码扩充

  • 学号运算结果为5,让系统支持Double类

  • 编写抽象类,扩充代码,并赋予相应数据类型的数值
    8

  • 运行结果
    9

提交四:以TDD的方式开发一个复数类Complex

  • 编写产品代码
    10

  • 编写测试代码
    11

提交五:UML建模

  • 选择程序MyComplex与MyComplexTest,并建模
    12

3. 实验过程中遇到的问题和解决过程

  • 问题1:StringBufferTest程序中,预测capacity容量与实际容量不同
    13

    • 原因分析:
      • StringBuffer(String s)可以指定给对象的实体的初始容量为参数字符串s的长度额外再加16个字符
        所以a这个包含了12个c的字符串的容量开辟方法,是在其12的长度基础上再加16个字符的容量,即28;而StringBuffer.append的用途是将字符串追加进原先的字符序列,容量是先拓展好的,所以它将遵循capacity的扩容方法继续扩容
      • 扩容规律:小于当前容量时,容量不变;大于当前容量,并且小于(现capacity+1)2,则容量变为(现capacity+1)2;大于当前容量,并且大于(现capacity+1)*2,则容量变为用户所设置的容量
    • 解决方案:根据扩容规律修改测试数值
  • 问题2:不理解实验三的意图

    • 原因分析:

      • 课前还未接触学习类的继承、接口、抽象类等知识概念,所以在代码理解层面上就有困难
      • 误以为是要扩展6个程序
      • 博客教程的图片无法显示
    • 解决方案:在参考了上届学长学姐的博客,加上自己私下的学习后,形成了最终理解:
      3-4

      • 学号%6取余结果决定了扩展的程序
      • 定义了两个抽象类Data与Factory,Integer与Double是Data的子类,IntFactory与DoubleFactory是Factory的子类。通俗可理解为,double与int是特殊的数据(data)
      • Integer与Double有两个方法分别负责赋值与打印
      • IntFactory与DoubleFactory调用抽象类方法CreateDataObject生成符合数据类型的新数值
      • Document接受相应Factory生成的数值并打印
  • 问题3:输出结果与预期结果显示一致,却无法通过测试
    14

    • 原因分析:显示似乎是相同的,但实际产品代码中返回的是字符串形式,测试代码测试的是数值
    • 解决方案:测试代码中引用toString方法,将数值转为字符串形式

其他(感悟、思考等)

  • 可能是课时压缩的关系,老师上课进度很快,任务也比较繁重,需要投入更多的时间自学,不然连演示代码都看不懂,更别提自己设计了

参考资料

posted @ 2019-09-29 15:29  陆彦杰  阅读(191)  评论(0编辑  收藏  举报