zoukankan      html  css  js  c++  java
  • 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;
        }
    }
    

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

    单元测试的好处:

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

  • 相关阅读:
    Anaconda+Tensorflow环境安装与配置
    计算机视觉(视频追踪检测分类、监控追踪)常用测试数据集
    迁移学习( Transfer Learning )
    matlab函数_连通区域
    GMM的EM算法实现
    对​O​p​e​n​C​V​直​方​图​的​数​据​结​构​C​v​H​i​s​t​o​g​r​a​m​的​理​解
    opencv基于混合高斯模型的图像分割
    LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
    视频测试序列(转)
    高职扩招,拿大专学历
  • 原文地址:https://www.cnblogs.com/J1n233/p/6930825.html
Copyright © 2011-2022 走看看