实验二
在运行这个代码时,Cat类和Dog类因为有重复定义而无法运行Animal的类文件。多次尝试后失败。求指导。
第三类实验
SOLID原则
- SRP(Single Responsibility Principle,单一职责原则)
- OCP(Open-Closed Principle,开放-封闭原则)
- LSP(Liskov Substitusion Principle,Liskov替换原则)
- ISP(Interface Segregation Principle,接口分离原则)
- DIP(Dependency Inversion Principle,依赖倒置原则)
Rule of three (三次原则):第一次用到某个功能时,你写一个特定的解决方法;第二次又用到的时候,你拷贝上一次的代码(违反了DRY);第三次出现的时候,你才着手"抽象化",写出通用的解决方法。
第四类练习
最后一个的Complex类是在我自己电脑里的eclipse实现的。Complex class 和test class都是按照实验一中的TDD设计方法建立的,建立了test文件及juint,但是在运行test文件时,run as中只有常规的运行console 窗口,运行成功,并未出现Junit选项。在多次更改ecilpse设置后,始终无法出现run as 中要使用动态条的选项。后来自己加上了@Test,就出现了Juint run 。运行之后ComplexTest文件中有两个错。一个是主函数不应该有参数,因此改为空参数类型的主函数;另一个是主函数不应定义为静态,因此将static删去。再次运行,成功!出现绿色条。
步骤 | 耗时 | 百分比 |
---|---|---|
需求分析 | 2h | 33.3% |
设计 | 2h | 33.% |
代码实现 | 1h | 15.6% |
测试 | 1h | 15.6% |
分析总结 |
伪代码
建立一个复数类函数,建立成员对象。判断参数是否合法,将参数传值到函数中。建立一个复数加法函数。再建立一个复数减法函数。
public class ComplexTest{
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.Jia(c1, c2).rePart+"+"+c.Jia(c1, c2).imPart+"i").toString()); System.out.println("两复数之差为:"); System.out.println((c.Jian(c1, c2).rePart+"+"+c.Jian(c1, c2).imPart+"i").toString()); } }
}
产品代码
public class Complex { double rePart,imPart; Complex() { this.rePart=0; this.imPart=0; } Complex(double rePart) { this.rePart=rePart; this.imPart=0; } Complex(double rePart,double imPart){ this.rePart=rePart; this.imPart=imPart; } Complex Jia(Complex p1,Complex p2){ Complex p =new Complex(p1.rePart+p2.rePart,p1.imPart+p2.imPart); return p; } Complex Jian(Complex p1,Complex p2){ Complex p =new Complex(p1.rePart-p2.rePart,p1.imPart-p2.imPart); return p; }
void Print() { System.out.println("复数的值为:"); if(this.imPart!=0) System.out.println(this.rePart+"+"+this.imPart+"i"); else System.out.println(this.rePart); }
测试代码
public class ComplexTest{
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.Jia(c1, c2).rePart+"+"+c.Jia(c1, c2).imPart+"i").toString()); System.out.println("两复数之差为:"); System.out.println((c.Jian(c1, c2).rePart+"+"+c.Jian(c1, c2).imPart+"i").toString()); } }
}
总结单元测试代码:
有了单元测试代码,我们在程序纠错中方便了许多。在运行中可能会一下子出错,无法一一纠正出来。有了单元测试,就知道运行的错误在哪,测试可以知道自己的产品代码是否符合要求,就只带运行出错在哪个环节。