《程序设计与数据结构》实验2报告

学号20172326 2017-2018-2 《程序设计与数据结构》实验2报告

课程:《程序设计与数据结构》

班级: 1723
姓名: 康皓越
学号:20172326
实验教师:王志强
实验日期:2018年4月18日
必修/选修: 必修

0.前言

1.实验内容

  1. 初步掌握单元测试和TDD
  2. 理解并掌握面向对象三要素:封装、继承、多态
  3. 初步掌握UML建模
  4. 熟悉S.O.L.I.D原则
  5. 了解设计模式
  6. 完成蓝墨云上 (1)-(5)实验。

2. 实验过程及结果

第一个提交点,在idea中使用 junit测试代码,分别测试正常情况,错误情况,边界情况

  • 直接以参考链接中娄老师的代码为例,测试了要求中的三种情况,初步了解、掌握junit-test的用法。代码运行,test测试截图如下。

第二个提交点,以 TDD的方式研究学习StringBuffer

  • TDD(Test Driven Devlopment, 测试驱动开发)通过边测试边写入代码的方式来开发程序,减少了错误,同时,更加符合设计需求。

积极主动敲代码,使用JUnit学习Java
中给出了代码的例子,但是,娄老师也提到,第一个代码是不能直接使用的,同时,程序涉及到的均为Java中的String类的方法可以直接利用,而StringBuffer方法的子方法分别有

等等,而我在本次实验主要测试了charAt()、capacity()、length()、indexOf()等方法。在jkd中可以分别查到它们的含义,如下:

public char charAt(int index)

返回此序列中指定索引处的 char 值。第一个 char 值在索引 0 处,第二个在索引 1 处,依此类推,这类似于数组索引。

public int capacity()

返回当前容量。容量指可用于最新插入的字符的存储量,超过这一容量就需要再次进行分配。

public int length()

返回长度(字符数)

public int indexOf(String str,int fromIndex)

从指定的索引处开始,返回第一次出现的指定子字符串在该字符串中的索引。返回的整数是满足以下条件的最小 k 值:

  • 了解到了这些方法的内容,那么如何实现呢?参考娄老师的博客,了解到了jUnit中的assertEquals方法,借此方法,我们就可以来检测程序是否运行正确。同时,该方法能够检测不同的数据类型。同时,注意到,在每个方法头处无一例外地有throws Exception,这个语句,中文为抛出异常,接下来会学到,但大意是如果出现与设计不符,则抛出异常。

第三个提交点,对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理解设计模式用自己的学号%6进行取余运算,根据结果进行代码扩充:

  • OCP为Open-Closed Principle,开放-封闭原则
  • DIP为Dependency Inversion Principle,依赖倒置原则
  • 首先,谈谈理解。
  • OCP应当满足子类可以方便地继承父类,但不能肆意进行修改,这也要求我们在编写时要尽可能地抽象概括,并且具有”最大公约数“地效果。
  • DIP为“高层模块不应该依赖于低层模块。二者都应该依赖于抽象
    抽象不应该依赖于细节。细节应该依赖于抽象”,也就是说,为了保证在继承过程中,子类是在具有了父类的基础上,再继续发展自己的“特征”,同时,类似于遗传,顺序为由父到子。同时,只有越抽象的函数,才能继承下去。细节只在子类当中体现。
  • 回到问题,我的学号为20172326,取余后为布尔型。从例子可以看出,当中体现了大量的抽象方法,同时,抽象方法很好的表示了其目的,在继承时很为简便,所以,任何子类都可以使用。

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

  • 事实上,通过这个实验,我真正理解了TDD,测试就是需求,别的一律多余。要实现复数的四则运算,就不妨写一个方法,测试一个,通过则继续,否则,检查错误。


第五个提交点,对实验二中的代码进行建模

  • UML类图更多的实在课本上看到,当然,在最近的练习中也尝试过手画类图,正确的顺序当然是先画类图,再继续敲代码。清晰的图可以给予人思路,并且梳理不同类的关系。参考相关资料,绘制出了相关UML图。

    改正:

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

1. IDEA中的问题,找不到主方法,提示缺少类8。

  • 解决方法:在老师的帮助下,将类型由9变为8。

2. 用JUint测试StringBuffer测试时,出现错误。

  • 经过检测发现‘’ 单引号是用来定义字符串,而我当时打成了双引号,导致出现了形似而神不似的情况。

3. 测试类找不到的问题

  • 问题出在class文件与test类文件的设置问题,使得测试文件找不到可执行的类,当我将其删除后,并重新设置package位置后,得以执行。

其他(感悟、思考等)

  • 本次实验一下子就来了五个,确实一下子吃不消,但是很多概念,例如TDD、SOLID、OCP、DIP等概念反复练习之后得以理解。同时结合第九章的继承知识,有了一个较好的理解。

参考资料

原文地址:https://www.cnblogs.com/326477465-a/p/8923047.html