博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

 # 20202304 2021-2022-1 《数据结构与面向对象程序设计》实验报告

课程:《程序设计与数据结构》
班级: 2023
姓名:何锐
学号:20202304
实验教师:王志强
实验日期:2021年9月30日
必修/选修: 必修

 

 

## 1.实验内容

下载安装并使用IDEA,完成下面实验(https://www.cnblogs.com/rocedu/p/6371315.html)。

1. 初步掌握单元测试和TDD
2. 理解并掌握面向对象三要素:封装、继承、多态
3. 初步掌握UML建模
4. 完成蓝墨云上 (1)-(5)实验。

 

 

## 2.实验过程及结果

1. 初步掌握单元测试和TDD

  即云班课上的实验第(1)、(2)部分,着重于介绍编程和程序设计的基础。编程前要把干什么、如何干想清楚才能把程序写对、写好。

想用程序解决问题时,要会写三种码:

  • 伪代码
  • 产品
  • 代码
  • 测试代码

伪代码即易理解的人类语言,不涉及任何具体编程语言语法相关的语句。从意图层面来解决问题,产品代码最自然的、最好的注释。

产品代码即具体编程语言去实现功能。

测试代码则负责查找Bug和验证程序代码有无问题,程序员对类实现的测试便叫做单元测试。

以下为(1)的例子:

伪代码:

百分制转五分制:
   如果成绩小于60,转成“不及格”
   如果成绩在60与70之间,转成“及格”
   如果成绩在70与80之间,转成“中等”
   如果成绩在80与90之间,转成“良好”
   如果成绩在90与100之间,转成“优秀”
   其他,转成“错误”  

产品代码:

public class MyUtil{
public static String percentage2fivegrade(int grade){
//如果成绩小于0,转成“错误”
if ((grade < 0))
return "错误";
//如果成绩小于60,转成“不及格”
else if (grade < 60)
return "不及格";
//如果成绩在60与70之间,转成“及格”
else if (grade < 70)
return "及格";
//如果成绩在70与80之间,转成“中等”
else if (grade < 80)
return "中等";
//如果成绩在80与90之间,转成“良好”
else if (grade < 90)
return "良好";
//如果成绩在90与100之间,转成“优秀”
else if (grade <= 100)
return "优秀";
//如果成绩大于100,转成“错误”
else
return "错误";
}
}

测试结果:

单元测试就完成了,一个暂时没有什么大问题的程序也就写好了。

 

然后,是学习TDD即Test Driven Development,测试驱动开发

现在的思路恰好相反,我们思路是先写测试代码,再写产品代码。

TDD的一般步骤如下:

  • 明确当前要完成的功能,记录成一个测试列表
  • 快速完成编写针对此功能的测试用例
  • 测试代码编译不通过(没产品代码呢)
  • 编写产品代码
  • 测试通过
  • 对代码进行重构,并保证测试通过(重构下次实验练习)
  • 循环完成所有功能的开发

下面是例子(通过TDD来学习StringBuffer):

测试:

程序:

 

2. 理解并掌握面向对象三要素:封装、继承、多态

  (1)封装与继承

    封装:使用private关键字将类的某些信息隐藏在类内部,不允许外部程序直接访问,通过该类提供的getter、setter方法访问。

    继承:子类继承父类的属性和方法,可以修改添加。

(需注意:一个子类只能继承一个父类,但可以叠加继承)

有以下两个程序分别体现继承和多态

 

码云路径:https://gitee.com/besti2023javads/hr20202304.git(有需要自取)

 

3. 初步掌握UML建模

对一个Animal类做了简单的建模:

 

4. 完成蓝墨云上 (1)-(5)实验

如图:

 

 

(1)任务详情
参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST 
参考http://www.cnblogs.com/rocedu/p/6736847.html

提交最后三个测试用例都通过的截图,截图上要有画图加水印,输入自己的学号。

(2)任务详情

参考 积极主动敲代码,使用JUnit学习Java (http://www.cnblogs.com/rocedu/p/4837092.html)
参考http://www.cnblogs.com/rocedu/p/6736847.html
以 TDD的方式研究学习StringBuffer,提交你的单元测试用例和测试通过的截图,截图要加上学号水印。

3)任务详情

实验三 Java面向对象程序设计(http://www.cnblogs.com/rocedu/p/4472842.html)

参考http://www.cnblogs.com/rocedu/p/6736847.html

对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理解设计模式
用自己的学号%6进行取余运算,根据结果进行代码扩充:
0:让系统支持Byte类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
1:让系统支持Short类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
2:让系统支持Boolean类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
3:让系统支持Long类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
4:让系统支持Float类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
5:让系统支持Double类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印

  对设计模式示例扩充,Float型

4)任务详情
提交:单元测试代码和运行成功截图及码云上代码链接,截图要加上学号水印

参考http://www.cnblogs.com/rocedu/p/6736847.html

任务:以TDD的方式开发一个复数类Complex,要求如下:

// 定义属性并生成getter,setter
double RealPart;
double ImagePart;

(5)任务详情

使用[WhiteStarUML](http://whitestaruml.sourceforge.net/)对实验二中的代码进行建模,发类图的截图,加上学号水印。
参考http://www.cnblogs.com/rocedu/p/6736847.html



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


1.junit一开始总是找不到,也不会使用。

后来通过课堂和b站课堂学会了使用方法。

2.复数程序自己写了好多遍,不太能体现,也老是出错。

后通过学习学长,并在老师的文件和课件帮助下完成复数计算器。

3.不会使用starUML

后通过学习b站和娄老师的帖子学会。

 

## 其他(感悟、思考等)

感觉这次是个大工程,很多东西刚看到人都是懵的。在长达4天的网课学习后,才逐渐对java的面向对象设计和基础的三大要素的灵活性和方便性。也逐渐加深了对java的理解。