20155230 实验二《Java面向对象程序设计》实验报告

20155230 实验二《Java面向对象程序设计》实验报告

一、单元测试

三种代码

  • 知道了伪代码、产品代码、测试代码的关系和用途,并根据老师的例子,按测试代码调试了产品代码。

  • 值得注意的是,测试用例要全面选择,特别是异常用例和边界用例。

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

  • 安装了Java单元测试工具JUnit进行TDD。体会了TDD编码节奏。并且最终测试结果出现了绿条。

二、面向对象三要素

抽象、封装、继承和多态

  • 学会了使用StarUML进行建模,针对最后练习里设计复数类进行OOD设计。老师已经给出了Complex类的整体框架。我在StarUML中画出了Complex类的模型图。

三、设计模式初步

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,依赖倒置原则)

模式与设计模式

知道了模式的重要作用和设计模式在Java中的重要地位。

设计模式示例

根据老师给出的例子体会了OCP原则和DIP原则,初步理解了设计模式,并实例程序扩充,使其支持了short类。

四、练习

使用TDD方式设计实现复数类Complex

Complex类完整代码:

public class Complex {
    // 定义属性并生成getter,setter
    private double RealPart;
    private double ImagePart;

    public void setterRealPart(double realPart) {
        this.RealPart = realPart;
    }
    public void setterImagePart(double imagePart){
        this.ImagePart = imagePart;
    }
    public double getterRealPart(){
        return RealPart;
    }
    public double getterImagePart(){
        return ImagePart;
    }

    // 定义构造函数
    public Complex(){}
    public Complex(double R,double I){
        this.RealPart = R;
        this.ImagePart = I;
    }

    //Override Object
    public boolean equals(Object obj){
        if(this == obj){
            return true;
        }
        if(!(obj instanceof Complex)){
            return false;
        }
        Complex complex = (Complex) obj;
        if(getterRealPart()!=complex.getterRealPart()){
            return false;
        }
        if(getterImagePart()!=(complex.getterImagePart())){
            return false;
        }
        return true;
    }
    public String toString(){
        String s = new String(Double.toString(getterRealPart()));
        //  s.concat(Double.toString(getterRealPart()));
        if(getterImagePart()>0)
        s = s + '+';
        s = s + Double.toString(getterImagePart());
       // s.concat(Double.toString(getterImagePart()));
        s = s + 'i';
        return s;
    }

    // 定义公有方法:加减乘除
    Complex ComplexAdd(Complex a){
        Complex b = new Complex();
        b.ImagePart = this.ImagePart + a.ImagePart;
        b.RealPart = this.RealPart + a.RealPart;
        return b;
    }
    Complex ComplexSub(Complex a){
        Complex b = new Complex();
        b.ImagePart = this.ImagePart - a.ImagePart;
        b.RealPart = this.RealPart - a.RealPart;
        return b;
    }
    Complex ComplexMulti(Complex a){
        Complex b = new Complex();
        b.RealPart = this.RealPart * a.RealPart - this.ImagePart * a.ImagePart;
        b.ImagePart = this.RealPart * a.ImagePart + this.ImagePart * a.RealPart;
        return b;
    }
    Complex  ComplexDiv(Complex a) {
        Complex b = new Complex();
        b.RealPart = (this.RealPart * a.RealPart + this.ImagePart * a.ImagePart)/(a.RealPart*a.RealPart+a.ImagePart*a.ImagePart);
        b.ImagePart = (this.ImagePart * a.RealPart - this.RealPart * a.ImagePart)/(a.RealPart*a.RealPart+a.ImagePart*a.ImagePart);
        return b;
    }
}

最终每个方法都测试通过了。

单元测试的好处:

单元测试将复杂的问题分解了。只要我们能保证每一块积木是正确可用的,那我们砌出来的墙,建起来的楼必然也是牢靠的。

posted @ 2017-06-01 21:21  J1n  阅读(185)  评论(0编辑  收藏  举报