学号 20172328 《程序设计与数据结构》实验二报告

学号 20172328 《程序设计与数据结构》实验二报告

课程:《程序设计与数据结构》
班级: 1723
姓名: 李馨雨
学号:20172328
实验教师:王志强
实验日期:2018年4月17~30日
必修/选修: 必修java

1.实验内容程序员

  • 初步掌握单元测试和TDD编程

  • 理解并掌握面向对象三要素:封装、继承、多态设计模式

  • 初步掌握UML建模安全

  • 熟悉S.O.L.I.D原则数据结构

  • 了解设计模式多线程

  • 完成蓝墨云上 (1)-(5)实验。函数

2.实验过程及结果
码云连接工具

  • 第一个提交点
    • 考查JUnit会不会使用,测试用例要包含正常状况,错误状况,边界状况的测试 。
  • 第二个提交点
    • 以 TDD的方式研究学习StringBuffer
      ,测试本身会不会写JUnit测试用例。
  • 第三个提交点
    • 对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理解设计模式。让系统支持Float类,并在MyDoc类中添加测试代码代表添加正确,提交测试代码和运行结的截图,加上学号水印。
  • 第四个提交点
    • 以TDD的方式开发一个复数类Complex。
  • 第五个提交点
    • 使用StarUML对实验二中的代码进行建模,类图中至少包含两个类。

3.实验过程当中遇到的问题和解决过程单元测试

问题1:StringBuilder、StringBuffer、String类之间的关系
问题1解决方案:

String的值是不可变的,这就致使每次对String的操做都会生成新的String对象,不只效率低下,并且大量浪费有限的内存空间,StringBuffer是可变类,和线程安全的字符串操做类,任何对它指向的字符串的操做都不会产生新的对象,StringBuffer和StringBuilder类功能基本类似。

  1. String 类
    String的值是不可变的,这就致使每次对String的操做都会生成新的String对象,不只效率低下,并且大量浪费有限的内存空间。 String a = "a"; //假设a指向地址0x0001
    a = "b";//从新赋值后a指向地址0x0002,但0x0001地址中保存的"a"依旧存在,但已经再也不是a所指向的,a 已经指向了其它地址。
    所以String的操做都是改变赋值地址而不是改变值操做。

  2. StringBuffer是可变类,和线程安全的字符串操做类,任何对它指向的字符串的操做都不会产生新的对象。 每一个StringBuffer对象都有必定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增长容量。

StringBuffer buf=new StringBuffer(16); //分配长16字节的字符缓冲区
StringBuffer buf=new StringBuffer(512); //分配长512字节的字符缓冲区
StringBuffer buf=new StringBuffer("this is a test")//在缓冲区中存放了字符串,并在后面预留了16字节的空缓冲区。

3.StringBuffer
  StringBuffer和StringBuilder类功能基本类似,主要区别在于StringBuffer类的方法是多线程、安全的,而StringBuilder不是线程安全的,相比而言,StringBuilder类会略微快一点。对于常常要改变值的字符串应该使用StringBuffer和StringBuilder类。
问题2:多线程和单线程的概念
问题2解决方案:

  • 多线程:多线程是指程序中包含多个执行流,即在一个程序中能够同时运行多个不一样的线程来执行不一样的任务,也就是说容许单个程序建立多个并行程序。
  • 单线程:线程是程序中的一个执行流,每一个线程都有本身专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不一样的线程能够执行一样的函数。
    问题3:编写Complex后进行测试驱动Complextest时出现的问题。

问题3解决方案:这个问题一直不知道是本身哪里错误。后来经同窗帮助,是前面Complex类中编写错误,形式参数中变量a的实部和虚部不能直接调用,应该用我以前写在前面的get方法去调用具体值。(很差意思,忘记截图)
问题4:在作第三个提交点问题时,有一个小错误。一直红线提示。
问题4解决方案:后来发现是浮点数程序系统默认double,因此float型在后面初始化时应该用数值f

其余(感悟、思考等)

个人实验二中的几个实验作的有点吃力,可是仍是收获了不少。尤为是测试驱动开发(TDD),直接提供了一种很好用的方法去测试编写的程序是否有些纰漏,以前用命令行的时候老是找编译类错误和语法错误,如今能够具体系统的去找编程中的逻辑错误,因此junit是一种对程序员很实用的工具。

参考资料

1.全面解释java中StringBuilder、StringBuffer、String类之间的关系

2.《Java程序设计与数据结构教程(第二版)》学习指导

相关文章
相关标签/搜索