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

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

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

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程序设计与数据结构教程(第二版)》学习指导

原文地址:https://www.cnblogs.com/LXY462283007/p/8934630.html