增加测试代码,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。
步骤
耗时
百分比
需求分析
1h
10%
设计
1h
10%
代码实现
2h
20%
测试
1h
10%
分析总结
1h
10%
3. 实现要有伪代码,产品代码,测试代码。
4.总结单元测试的好处
四、实验截图
五、练习题
//伪代码
//复数类
类有虚部实部
复数的加法运算
复数的减法运算
复数的乘法运算
复数的除法运算
//产品代码
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;
}
}
//测试代码
public static ComplexTest{
public static void main(String[] args){
class Complex {
private double m;// 实部
private double n;// 虚部
public Complex(double m, double n) {
this.m = m;
this.n = n;
}
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;
}
}
}
}
六、遇到的问题及解决方法
出现的问题:在单元测试的编写中,虚拟机出了问题,把文档菜单栏关闭了,找不到打不开。解决方法:关闭实验后重新开始。
还有就是在测试代码的编写过程中因为不熟悉这种编程过程所以不太会编写,最后是自己对照着产品代码来写的测试代码,所以测试代码出现了很多问题,花费了很多时间去修改和编写代码最终还是无法顺利运行。
七、总结及体会
本次试验进行实践较长,总结原因是不熟悉虚拟机环境。另外,单元测试有很大的好处,可以使编写的程序的人不断地考虑到多种程序可能出现的问题,也能让这个程序更加可靠,让使用者使用的较为顺利。在编写代码方面还是有些问题,比如程序的设计较为混乱,没有一个比较清晰的思路。今后还需改正。在编写代码方面还是有些问题,比如程序的设计较为混乱,没有一个比较清晰的思路。今后还需改正。