20145229吴姗珊《java程序设计》第2次实验报告
20145229吴姗珊《java程序设计》第2次实验报告
实验名称
Java面向程序设计,采用TDD的方式设计有关实现复数类Complex。
理解并掌握面向对象三要素:封装、继承、多态。
运用并且掌握单元测试。Java面向程序设计,采用TDD的方式设计有关实现复数类Complex。
实验步骤
本次实验在编写并设计有关实现复数类Complex的功能下,尝试使用TDD方式,并且运用单元测试
伪代码:
先写伪代码,伪代码可以用汉语写,伪代码与具体编程语言无关,不要写一些不相关的语句,伪代码从意图层面来解决问题。伪代码是产品代码最自然的、最好的注释。
公共类Complex;
定义双精度的实部和虚部(实部用real,虚部用img);
构造函数取得实部;
构造函数取得虚部;
构造函数:两个复数相加,结果返回;
构造函数:两个复数相减,结果返回;
构造函数:两个复数相乘,结果返回;
构造函数:两个复数相除,结果返回;
··· ···
以上是这个复数类的所有伪代码;
测试代码;
代码结束;
产品代码:
有了伪代码,我们用特定编程语言翻译一下,就是可用的产品代码了。对于产品代码,只要遵照所选择的特定编程语言翻译,注意语法问题,注意细节,就很容易成功
public class Complex
{
double real,img; //实部和虚部
public Complex() //默认构造方法
{
this.real=0;
this.img =0;
}
public Complex(double real,double img) //带参数的构造方法
{
this.real=real;
this.img =img;
}
public double getReal()
{ return this.real; } //得到实部
public double getImage()
{ return this.img; } //得到虚部
public double getReal(Complex c)
{ return c.real; } //得到复数c的实部,这两个函数看起来好像有点多余,但在特殊的情况下会有用
public double getImage(Complex c)
{ return c.img; } //得到复数c的虚部
public void setReal (double real)
{ this.real=real; } //设置实部
public void setImage(double img)
{ this.img =img; } //设置虚部
public Complex addComplex(Complex a,Complex b) //两个复数相加,结果返回
{
Complex temp =new Complex();
temp.real=a.real+b.real;
temp.img =a.img +b.img;
return temp;
}
public Complex decComplex(Complex a,Complex b) //两个复数相减,结果返回
{
Complex temp = new Complex();
temp.real = a.real - b.real;
temp.img = a.img - b.img;
return temp;
}
public Complex mulComplex(Complex a,Complex b) //两个复数相乘,结果返回
{
Complex temp = new Complex();
temp.real = a.real*b.real-a.img*b.img;
temp.img = a.real*b.img+a.img*b.real;
return temp;
}
public Complex divComplex(Complex a,Complex b) //两个复数相除,结果返回
{
Complex temp = new Complex();
temp.real=(a.real*b.real+a.img*b.img)/(b.real*b.real+b.img*b.img);
temp.img =(a.img*b.real-a.real*b.img)/(b.real*b.real+b.img*b.img);
return temp;
}
public void printComplex() //在console端输出这个复数,测试用
{
System.out.println(""+this.real+"+"+this.img+"i");
}
public String toString(){
String fin=" ";
if(img>0){
fin = real+"+"+img+"i";
}else if(img<0){
fin = real+ ""+img+"i";
}else{
fin = fin;
}
return fin;
}
以上即为产品代码,下面即为测试代码
public static void main(String[] args) //测试代码
{
Complex cc=new Complex(4,8);
cc.printComplex();
Complex dd=new Complex(2,2);
dd.printComplex();
System.out.println("-----------------");
Complex ff=new Complex();
ff=ff.addComplex(cc,dd);
ff.printComplex();
ff=ff.decComplex(cc,dd);
ff.printComplex();
ff=ff.mulComplex(cc,dd);
ff.printComplex();
ff=ff.divComplex(cc,dd);
ff.printComplex();
System.out.println("-----------------");
cc.printComplex();
cc=new Complex(4,8);
cc.printComplex();
cc=new Complex(4,8);
cc.printComplex();
cc=new Complex(4,8);
cc.printComplex();
System.out.println("-----------------");
cc.setReal(123);
cc.setImage(456);
cc.printComplex();
System.out.println(""+cc.getReal()+"+"+cc.getImage()+"i");
System.out.println("-----------------");
}
}
最后结果
为了验证自己的代码是正确的,所以我们需要做代码测试。在java中,程序员对类的测试也称为单元测试,现在从老师的博客中一步步步骤开始,以下即为过程。
具体的步骤参照老师的博客
写测试代码,证明自己的代码没有问题。在Java编程时,程序员对类实现的测试叫单元测试。类XXXX的单元测试,我们一般写建一个XXXXTest的类
创建text的时候,选中需要的检测的函数,go to text
现在进行分装测试
加法
减法
乘法
除法
熟悉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,依赖倒置原则)
用UML建模复数类Complex
建模结果
实验心得
就我个人而言,我觉得这次的实验主要难在建模上,在编写程序中首先要为了实现产品功能编写伪代码,产品代码,测试代码,一直到完成了这些步骤才能真正实现产品的功能。老师给的步骤很详细,给我们的链接中几乎包含了所有的步骤,所以做下来也是对过程的一边熟悉。而且,从利用UML我们可以清晰的看到java代码的构架是怎样的,而且简便易用,能够节约一大部分时间
实验PSP (Presonal Sowftware Process)时间
步骤 | 耗时 | 百分比 |
---|---|---|
需求分析 | 10 | 8 |
设计 | 30 | 20 |
代码实现 | 60 | 40 |
测试 | 20 | 12 |
分析总结 | 30 | 20 |
20145229吴姗珊《java程序设计》第2次实验报告的更多相关文章
- 20145229吴姗珊 《Java程序设计》课程总结
20145229吴姗珊 <Java程序设计>课程总结 (按顺序)每周读书笔记链接汇总 第一周:http://www.cnblogs.com/20145229ss/p/5248728.htm ...
- 20145229吴姗珊 《Java程序设计》第9周总结
20145229吴姗珊 <Java程序设计>第9周总结 教材学习内容总结 第十六章 整合数据库 JDBC入门 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交 ...
- 20145229吴姗珊 《Java程序设计》第8周学习总结
20145229吴姗珊 <Java程序设计>第8周总结 教材学习内容总结 第十四章 NIO与NIO2 NIO: InputStream.OutputStream的输入输出,基本上是以字节为 ...
- 20145229吴姗珊 《Java程序设计》2天小总结
20145229吴姗珊 <Java程序设计>2天小总结 教材学习内容总结 由于这周学的内容比较简单,主要是关于日期.日期之类的东西.所以自己从书上看了一些内容 总结了第四章 认识对象 和第 ...
- 20145229吴姗珊 《Java程序设计》第7周学习总结
20145229吴姗珊 <Java程序设计>第7周学习总结 教材学习内容总结 第13章时间与日期 即使标注为GMT(格林威治时间),实际上谈到的的是UTC(Unix时间)时间. 秒的单位定 ...
- 20145229吴姗珊 《Java程序设计》两天小总结
20145229吴姗珊 <Java程序设计>两天小总结 教材学习内容总结 第十章 输入\输出 1.java将输入\输出抽象化为串流,数据有来源及目的地,衔接两者的是串流对象 2.从应用程序 ...
- 20145229吴姗珊 《Java程序设计》第6周学习总结
20145229吴姗珊 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 输入\输出 1.java将输入\输出抽象化为串流,数据有来源及目的地,衔接两者的是串流对象 2.输入串 ...
- 20145229吴姗珊《Java程序设计》2天总结
20145229吴姗珊<Java程序设计>2天总结 教材学习内容总结 异常处理 1.使用try.catch Java中所有错误都会被包装成对象,可以尝试(try)执行程序并捕捉(catch ...
- 20145229吴姗珊 《Java程序设计》第5周学习总结
20145229吴姗珊 <Java程序设计>第5周学习总结 教材学习内容总结 第八章 异常处理 1.设计错误对象都继承自java.lang.Throwable类 2.Java中所有错误都会 ...
随机推荐
- 高抛低吸T+0操作要领(目前行情短线炒作的必备技能)
最近的行情只能用操蛋来形容,但是危机中不乏机会.现在已经不是之前行情的思路,那着一个股票长线抱着,即使是好的牛股,也经不起目前行情的这 么折腾.所以,现在最适合的操作方式就是高抛低吸.今天低吸保不准明 ...
- web网页按钮如何制作
1:用矩形形状工具画一个矩形 2 : 加描边 3:三键+N新建图层 前景色变成白色,白色到透明的渐变,选择径向渐变. 4:为了使自然,按住ALT键,使渐变扩大,和矩形保持一直,之后向上调整一些. 5: ...
- Oracle集群和灾备解决方案介绍
Oracle本身有各种各样的解决方案,本文主要是对以下几种解决方案做一下简单的梳理. 1. Oracle Rac解决方案. Oracle Rac主要通过两台Oracle服务器来组件集群,提高Or ...
- Linux的驱动模块管理:modprobe
由一段脚本開始: MODULE_PATH=/lib/modules/`uname -r` if [ ! -f ${MODULE_PATH}/modules.dep.bb ]; then # depmo ...
- linux 参数内核
优化Linux内核参数 转自:http://www.centoscn.com/CentOS/config/2013/0804/992.html vim /etc/sysctl.conf 1.net ...
- CentOS 6.9上安装mysql-5.6.37
CentOS 6.9上安装mysql-5.6.37 1.准备数据存放的文件系统 新建一个逻辑卷,并将其挂载至特定目录即可.这里不再给出过程. 这里假设其逻辑卷的挂载目录为/data,而后需要创建/da ...
- mysql解压版安装和卸载
问题1:发生系统错误 5. 解决:使用管理员身份安装即可 问题2:发生系统错误 2. 解决:cd C:\Program Files\MySQL\MySQL Server 5.6\bin 进入mysql ...
- 使用Office 365前,企业必须要知道的10件事
目前的市场上充斥着很多关于微软Office 365的炒作,相信厂商.客户或者企业的都有自己不同的考虑.Office 365是微软云版本的Office,用户可以通过互联网创建一个帐户,付款.下载应用安装 ...
- DFS应用——找出无向图的割点
[0]README 0.1) 本文总结于 数据结构与算法分析, 源代码均为原创, 旨在 理解 "DFS应用于找割点" 的idea 并用源代码加以实现: 0.2) 必须要事先 做个s ...
- web 开发之js---HTML5之广播聊天室
那个头标题很有意思js做的 http://www.cnblogs.com/xgao/p/4200985.html