学号20172326 2017-2018-2 《程序设计与数据结构》实验2报告
课程:《程序设计与数据结构》
班级: 1723
姓名: 康皓越
学号:20172326
实验教师:王志强
实验日期:2018年4月18日
必修/选修: 必修
0.前言
1.实验内容
- 初步掌握单元测试和TDD
- 理解并掌握面向对象三要素:封装、继承、多态
- 初步掌握UML建模
- 熟悉S.O.L.I.D原则
- 了解设计模式
- 完成蓝墨云上 (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等概念反复练习之后得以理解。同时结合第九章的继承知识,有了一个较好的理解。