20145310《Java程序设计》第2次实验报告

实验内容

  1. 初步掌握单元测试和TDD
  2. 理解并掌握面向对象三要素:封装、继承、多态
  3. 初步掌握UML建模
  4. 熟悉S.O.L.I.D原则
  5. 了解设计模式

实验步骤

1、单元测试

(1) 三种代码

伪代码、产品代码、测试代码

产品代码

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 "错误";
}
}

测试代码

public class MyUtilTest1 {
public static void main(String[] args) {
//测试出错情况
if(MyUtil.percentage2fivegrade(-10) != "错误")
System.out.println("test failed 1!");
else if(MyUtil.percentage2fivegrade(115) != "错误")
System.out.println("test failed 2!");
else
System.out.println("test passed!");
}
}

测试结果

(2) TDD(Test Driven Devlopment, 测试驱动开发)

先写测试代码,然后再写产品代码的开发方法叫“测试驱动开发”(TDD)。TDD的一般步骤如下:

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

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

-测试代码编译不通过

-编写产品代码

-测试通过

-对代码进行重构,并保证测试通过

-循环完成所有功能的开发

基于TDD,我们不会出现过度设计的情况,需求通过测试用例表达出来了,我们的产品代码只要让测试通过就可以了。 Java中有单元测试工具JUnit来辅助进行TDD,红叉说明代码存在语法错误,原因很简单,MyUtil类还不存在,类中的percentage2fivegrade方法也不存在,我们在TDDDemo的src目录中新建一个MyUtil的类,并实现percentage2fivegrade方法

(3)面向对象三要素

设计模式初步

S.O.L.I.D原则

SRP(Single Responsibility Principle,单一职责原则)

OCP(Open-Closed Principle,开放-封闭原则)

LSP(替换原则)

ISP(接口分离原则)

DIP(依赖倒置原则)

练习代码

public class ComplexDemo {
// main方法
public static void main(String[] a) {
Complex b = new Complex(2,5);
Complex c = new Complex(3,-4);
System.out.println(b + "+" + c + "=" + b.add(c));
System.out.println(b + "-" + c + "=" + b.minus(c));
System.out.println(b + "*" + c + "=" + b.multiply(c));
System.out.println(b + "/" + c + "=" + b.divide(c));
}
}
// Complex类
class Complex {
private double m;// 实部
private double n;// 虚部
public Complex(double m,double n) {
this.m = m;
this.n = n;
}
// add
public Complex add(Complex c) {
return new Complex(m + c.m,n + c.n);
}
// minus
public Complex minus(Complex c) {
return new Complex(m - c.m,n - c.n);
}
// multiply
public Complex multiply(Complex c) {
return new Complex(m * c.m - n * c.n,m * c.n + n * c.m);
}
// divide
public Complex divide(Complex c) {
double d = Math.sqrt(c.m * c.m) + Math.sqrt(c.n * c.n);
return new Complex((m * c.m + n * c.n) / d,Math.round((m * c.n - n * c.m) / d));
}
public String toString() {
String rtr_str = "";
if (n > 0)
rtr_str = "(" + m + "+" + n + "i" + ")";
if (n == 0)
rtr_str = "(" + m + ")";
if (n < 0)
rtr_str = "(" + m + n + "i" + ")";
return rtr_str;
}
}

PSP

步骤 耗时 百分比
需求分析 15min 15%
设计 15min 15%
代码实现 35min 35%
测试 20min 20%
分析总结 15min 15%

最新文章

  1. 【codevs3945】 完美拓印
  2. Toad快速入门
  3. android 内存泄露调试
  4. HDU 1269:迷宫城堡(强连通)
  5. SQL数据库设计三范式
  6. hdoj 1089(费马小定理)
  7. 第一pga 畸形消费分析
  8. Webpack单元测试,e2e测试
  9. 【转】nagios 命令解释
  10. springboot项目屏蔽mq或者mongodb的监控日志输出
  11. Hadoop 电话通信清单
  12. LeetCode--No.001 Two Sum
  13. hello-R
  14. Java中一种无意识的递归
  15. 原生js版ajax请求
  16. 《C++ Primer Plus》读书笔记之五—函数-C++的编程模块
  17. JQuery变量数字相加的研究
  18. git 克隆 提交本地修改到远程方法
  19. 正则表达式实现将html文本转换为纯文本格式(将html字符串转换为纯文本方法)
  20. AI从入门到放弃:CNN的导火索,用MLP做图像分类识别?

热门文章

  1. Map中存放数组
  2. java web页面跳转 总结
  3. rabbitmq 用户管理
  4. DocumentRoot \
  5. Redis的基本使用(基于maven和spring)
  6. 经常会碰到css的bug
  7. librosa音频特征提取,python librosa库在centos上依赖llvm的问题?
  8. 爬虫之cookiejar模块
  9. java 多线程 day11 lock
  10. 如何保护自己的GitHub代码不被别人覆盖