• 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方法,将数值转为字符串形式

    其他(感悟、思考等)

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

    参考资料

  • 相关阅读:
    vmware虚拟机安装centos,配置PHP、mysql
    Java初学者不得不知的概念,JDK,JRE,JVM的区别?(转)
    char a[] = "hello world1"和char *p = "hello world2";的区别(转)
    关于二维数组传参做形参(转)
    最长连续字母序列的长度(阿里2015在线研发工程师笔试题)
    两个线程并发执行以下代码,假设a是全局变量,那么以下输出______是不可能的?
    软件工程
    面向对象基础
    eclipse
    设计模式(java)--状态模式
  • 原文地址:https://www.cnblogs.com/algerlu/p/11608123.html
Copyright © 2020-2023  润新知