实验二 Java面向对象程序设计

实验内容

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

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

3.初步掌握UML建模

4.熟悉S.O.L.I.D原则

5.了解设计模式

实验步骤

(一)单元测试

(1) 三种代码:当用程序解决问题时,要写三种码:伪代码、产品代码、测试代码。

需求:我们要在一个MyUtil类中解决一个百分制成绩转成“优、良、中、及格、不及格”五级制成绩的功能。

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

(3)先写伪代码,伪代码与具体编程语言无关,可以使用与编程语法无关的语句(最好英语),有了伪代码后,用编程语言翻译伪代码,就可以得到产品代码,截图如下:

(4)建一个XXXXTest的类,针对MyUtil类,写一个MyUtilTest.java的测试模块,这里我们设计了一个测试用例(Test Case),测试用例是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。这里我们的测试输入是“50”,预期结果是“不及格”。

运行结果如下,测试结果符合预期,截图如下:

(5)只有一组输入的测试是不充分的,我们把一般情况都测试一下,代码如下:

结果如下:

(6)我们不能只测试正常情况,下面看看异常情况如何,比如输入为负分或大于100的成绩,代码如下:



结果如下:



·运行程序发现负分时与期望不一致,终于找到了一个bug,原因是判断不及格时没有要求成绩大于零。我们修改MyUtil.java,增加对负分的判断,代码如下:



再次运行测试,测试结果符合预期,如下图所示:





(7)测试边界情况,对输入为“0,60,70,80,90,100”这些边界情况进行测试的代码如下:





·我们发现边界情况中输入100时有一个Bug。我们修改MyUtil.java,把判断优秀的条件中包含输入为100的情况,代码如下:



再次执行测试,结果如下:



(二)TDD(Test Driven Devlopment, 测试驱动开发):就是一种先写测试代码,然后再写产品代码的开发方法。

·TDD的一般步骤如下:

明确当前要完成的功能,记录成一个测试列表

快速完成编写针对此功能的测试用例

测试代码编译不通过(没产品代码呢)

编写产品代码

测试通过

对代码进行重构,并保证测试通过(重构下次实验练习)

循环完成所有功能的开发

操作截图如下:

在MyUtilTest类中运行,绿色表示被执行部分测试通过。

练习内容

写一个类测试编写的复数类的方法

  • 构造函数,将实部,虚部都置为0
  • 构造函数,创建复数对象的同时完成复数的实部,虚部的初始化
  • 设置实部,设置虚部
  • 复数相加
  • 复数相减
  • 复数相乘
public class Complex {

    private double realPart;
private double imaginPart;
public Complex(){
double realPart;
double imaginPart;
}
public Complex(double r,double i){
double realPart;
double imaginPart;
this.realPart=r;
this.imaginPart=i;
}
public double getRealPart(){
return realPart;
}
public double getImaginPart(){
return imaginPart;
}
public void setRealPart(double d){
this.realPart=d;
} public void setImaginPart(double d) {
this.imaginPart =d;
}
public void ComplexAdd(Complex c){
this.realPart+=c.realPart;
this.imaginPart+=c.imaginPart;
}
public void ComplexAdd(double c){
this.realPart+=c;
}
public void ComplexMinus(Complex c){
this.realPart-=c.realPart;
this.imaginPart-=c.imaginPart;
}
public void ComplexMinus(double c){
this.realPart-=c;
}
public void ComplexMulti(Complex c){
this.realPart*=c.realPart;
this.imaginPart*=c.imaginPart;
}
public void ComplexMulti(double c){
this.realPart*=c;
} }

测试代码

import junit.framework.TestCase;
import org.junit.Test; import static org.junit.Assert.*;
public class ComplexTest extends TestCase{
Complex c1=new Complex(3,5);
Complex c2=new Complex(3,5);
double a=5; @Test
public void testComplexAdd() throws Exception {
c1.ComplexAdd(c2);
assertEquals(6.0,c1.getRealPart());
assertEquals(10.0,c1.getImaginPart());
} @Test
public void testComplexMinus() throws Exception {
c1.ComplexMinus(c2);
assertEquals(0.0,c1.getRealPart());
assertEquals(0.0,c1.getImaginPart()); } @Test
public void testComplexMulti() throws Exception {
c1.ComplexMulti(c2);
assertEquals(9.0,c1.getRealPart());
assertEquals(25.0,c1.getImaginPart()); }

20145103JAVA第二次实验报告的更多相关文章

  1. 20145330《Java程序设计》第二次实验报告

    20145330<Java程序设计>第二次实验报告 实验二 Java面向对象程序设计 实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承多态 3.初步掌握UM ...

  2. 20145320《Java程序设计》第二次实验报告

    20145320<Java程序设计>第二次实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.04.12 15: ...

  3. 《Java程序设计》第二次实验报告

    20145220 <Java程序设计>第二次实验报告 课程:Java程序设计 指导教师:娄嘉鹏 实验日期:2016.04.12 实验名称:Java面向对象程序设计 实验内容 初步掌握单元测 ...

  4. 20145333 《Java程序设计》第二次实验报告

    2014333 <Java程序设计>第二次实验报告 课程:Java程序设计 指导教师:娄嘉鹏 实验日期:2016.04.12 实验名称:Java面向对象程序设计 实验内容 初步掌握单元测试 ...

  5. 20145240 《Java程序设计》第二次实验报告

    20145240 <Java程序设计>第二次实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1452 指导教师:娄嘉鹏 实验日期:2016.04.12 实验 ...

  6. 第二次实验报告:使用 Packet Tracer 分析应用层协议

    个人信息: 姓名:倪晓东 班级:计算1811 学号:201821121020 1 实验目的 熟练使用Packet Tracer工具.分析抓到的应用层协议数据包,深入理解应用层协议,包括语法.语义.时序 ...

  7. java第二次实验报告

    课程:Java实验   班级:201352     姓名:池彬宁  学号:20135212 成绩:             指导教师:娄佳鹏   实验日期:15.05.05 实验密级:         ...

  8. java程序设计第二次实验报告

    北京电子科技学院(BESTI) 实验报告 课程:数据结构    班级:1352    姓名:何伟钦     学号:20135223 成绩:            指导教师:娄嘉鹏      实验日期: ...

  9. java第二次实验报告20135231

    Java实验报告二:Java面向对象程序设计 20135231 何佳 实验要求: 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉 ...

随机推荐

  1. Zabbix添加web页面监控告警

    一,选择添加了web监控的主机 二,创建一个告警触发器 三,定义监控项 设置完毕假如网站down就会触发告警 怎么设置web监控以及触发告警action参考 Zabbix使用SMTP发送邮件报警并且制 ...

  2. 第九课——MySQL优化之索引和执行计划

    一.创建索引需要关注什么? 1.关注基数列唯一键的数量: 比如性别,该列只有男女之分,所以性别列基数是2: 2.关注选择性列唯一键与行数的比值,这个比值范围在0~1之前,值越小越好: 其实,选择性列唯 ...

  3. 关于ios7 UINavigationController.interactivePopGestureRecognizer手势集成

    因为公司业务需求,结合网上的资料整理了一下. 如果自定义过navbar的leftbarbutton 或者backbarbutton 原生interactivePopGestureRecognizer默 ...

  4. 购物车-删除单行商品-HTMLTableElement.deleteRow()

    wta 问题发源的代码: /*删除单行商品*/ function deleteRow(rowId){ var Index=document.getElementById(rowId).rowIndex ...

  5. jquery的强大选择器

    $("#myELement")    选择id值等于myElement的元素,id值不能重复在文档中只能有一个id值是myElement所以得到的是唯一的元素 $("di ...

  6. VC++SDK编程——字体及位置示例

    #include <Windows.h> #include <tchar.h> #include <math.h> #define PI 3.1415926 BOO ...

  7. jupter nootbok 快捷键、NumPy模块、Pandas模块初识

    jupter nootbok 快捷键 插入cell:a b 删除cell:x cell模式的切换:m:Markdown模式 y:code模式 运行cell:shift+enter tab:补全 shi ...

  8. 文本情感分类:分词 OR 不分词(3)

    为什么要用深度学习模型?除了它更高精度等原因之外,还有一个重要原因,那就是它是目前唯一的能够实现“端到端”的模型.所谓“端到端”,就是能够直接将原始数据和标签输入,然后让模型自己完成一切过程——包括特 ...

  9. 0602-Zuul构建API Gateway-Zuul Http Client、cookie、header

    一.Zuul Http Client zuul使用的默认HTTP客户端现在由Apache HTTP Client支持,而不是已弃用的Ribbon RestClient.要使用RestClient或使用 ...

  10. HBase在HDFS上的目录树

    众所周知,HBase 是天生就是架设在 HDFS 上,在这个分布式文件系统中,HBase 是怎么去构建自己的目录树的呢? 这里只介绍系统级别的目录树: 一.0.94-cdh4.2.1版本 系统级别的一 ...