20145218 《Java程序设计》第02次实验报告
北京电子科技学院(BESTI)实验报告
课程:Java程序设计
班级:1452
指导教师:娄嘉鹏
实验日期:2016.04.12
实验名称:Java面向对象程序设计
一、实验内容
- 初步掌握单元测试和TDD
- 理解并掌握面向对象三要素:封装、继承、多态
- 初步掌握UML建模
- 熟悉S.O.L.I.D原则
- 了解设计模式
二、实验要求
1.没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程
2.完成实验、撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等)。报告可以参考范飞龙老师的指导
3. 严禁抄袭,有该行为者实验成绩归零,并附加其他惩罚措施。
4. 请大家先在实验楼中的~/Code目录中用自己的学号建立一个目录,代码和UML图要放到这个目录中,截图中没有学号的会要求重做,然后跟着下面的步骤练习。
三、实验步骤
(一)单元测试
(1) 三种代码
伪代码、产品代码、测试代码
-
一般测试:
-
边界测试:
-
测试出错情况:
- 改正代码:
(2) TDD(Test Driven Devlopment, 测试驱动开发)
1)先写测试代码,然后再写产品代码的开发方法叫“测试驱动开发”(TDD)。
TDD的一般步骤如下:
-
明确当前要完成的功能,记录成一个测试列表
-
快速完成编写针对此功能的测试用例
-
编写产品代码
-
测试通过
-
对代码进行重构,并保证测试通过(重构下次实验练习)
-
循环完成所有功能的开发
基于TDD,我们不会出现过度设计的情况,需求通过测试用例表达出来了,我们的产品代码只要让测试通过就可以了。 Java中有单元测试工具JUnit来辅助进行TDD,
红叉说明代码存在语法错误,原因很简单,MyUtil类还不存在,类中的percentage2fivegrade方法也不存在,我们在TDDDemo的src目录中新建一个MyUtil的类,并实现 percentage2fivegrade方法
测试结果出现了一个绿条(green bar),说明测试通过了。
2)TDD的编码节奏是:增加测试代码、JUnit出现红条、修改产品代码、JUnit出现绿条,任务完成
-
程序截图:
(二)面向对象三要素
(1)抽象
(2)封装、继承与多态
继承与多态的实现:
(三)设计模式初步
(1)S.O.L.I.D原则
面向对象三要素是“封装、继承、多态”,任何面向对象编程语言都会在语法上支持这三要素。如何借助抽象思维用好三要素特别是多态还是非常困难的,S.O.L.I.D类设计原则是一个很好的指导:
- SRP(Single Responsibility Principle,单一职责原则)
- OCP(Open-Closed Principle,开放-封闭原则)
- LSP(Liskov Substitusion Principle,Liskov替换原则)
- ISP(Interface Segregation Principle,接口分离原则)
- DIP(Dependency Inversion Principle,依赖倒置原则)
(四)练习
1使用TDD的方式设计关实现复数类Complex。
class complex
{
double re,im;
complex()
{
this.re=0;
this.im=0;
}
complex(double re)
{
this.re=re;
this.im=0;
}
complex(double re,double im)
{
this.re=re;
this.im=im;
}
complex add(complex p1,complex p2)
{
complex p=new complex(p1.re+p2.re,p1.im+p2.im);
return p;
}
complex minus(complex p1,complex p2)
{
complex p=new complex(p1.re-p2.re,p1.im-p2.im);
return p;
}
void print()
{
System.out.println("复数的值为:");
if(this.im!=0)
System.out.println(this.re+"+"+this.im+"i");
else
System.out.println(this.re);
}
}
public class Song
{
public static void main(String[] args)
{
complex c=new complex();
complex c1=new complex(2,7);
complex c2=new complex(5,2);
c1.print();
c2.print();
System.out.println("这两个复数的和为:");
System.out.println((c.add(c1,c2).re+"+"+
c.add(c1, c2).im+"i").toString());
System.out.println("这两个复数的差为:");
System.out.println((c.minus(c1,c2).re+"+"+
c.minus(c1, c2).im+"i").toString());
}
}
- 程序截图:
2.实验报告中统计自己的PSP(Personal Software Process)时间
步骤 | 耗时 | 百分比 |
---|---|---|
需求分析 | 30分钟 | 10% |
设计 | 两小时 | 40% |
代码实现 | 一小时 | 20% |
测试 | 一小时 | 20% |
分析总结 | 30分钟 | 10% |
实验感想
这次实验主要内容是代码面向对象三要素的应用,以及代码的设计思想以及测试方法,通过之前基本的练习已经初步掌握了Java程序设计的基本语句,今后将更加注重程序设计思维的练习。通过实验,开始自己练习编Java代码,而不是跟之前每周的学习一样只看书上的代码,只有当自己开始编代码时才知道以前以为自己已经掌握的知识其实并没有掌握,只有自己去编才是真正的学习。