zoukankan      html  css  js  c++  java
  • 20165226第二次实验

    实验二 面向对象程序设计

    实验目的

    • 一、提交最后三个JUnit测试用例(正常情况,错误情况,边界情况)都通过的截图,截图上要有画图加水印,输入自己的学号。考查JUnit会不会使用,测试用例至少要包含正常情况,错误情况,边界情况的测试。
    • 二、以 TDD的方式研究学习StringBuffer。
    • 三、对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理解设计模式。
    • 四、以TDD的方式开发一个复数类Complex。

    实验内容及步骤

    (一)使用JUnit,测试用例

    • 在插件安装对话框的搜索中输入junit,单击JunitGenerator V2.0,单击绿色的Install按钮安装。因为我没有次插件,因此实在网上download到本地,再install plugin from disk

    • 进行项目及文件的创建

      • 创建项目
      • 创建文件
      • create Test(创建JUnit3)
      • 增加测试用例(附产品代码)
      • 测试项目结果如下图所示(含正常、异常、边界)

        显示green bar,测试通过。

    (二)以TDD的方式研究学习StringBuffer

    • 新建类

    • 以 TDD的方式研究学习StringBuffer,用junit进行单元测试

    • 运行结果如图

    (三)体会OCP原则和DIP原则的应用,初步理解设计模式

    • 原代码
    class Integer { 
       int value;    
       public Integer(){
          value=100;  
       }    
       public void DisplayValue(){
            System.out.println(value);  
       } 
    } 
    class Document { 
       Integer pi; 
       public Document(){
           pi = new Integer(); 
       } 
       public void DisplayData(){
          pi.DisplayValue();  
       } 
    } 
    public class MyDoc{ 
       static Document d;
       public static void main(String [] args) { 
            d = new Document(); 
            d.DisplayData(); 
      } 
    }
    

    让系统支持Boolean类,Document类要修改构造方法,这还违反了OCP原则。封装、继承、多态解决不了问题,在则需要设计模式。

    abstract class Data {
        abstract public void DisplayValue();
    }
    class Integer extends  Data {
        int value;
        Integer() {
            value=100;
        }
        public void DisplayValue(){
            System.out.println (value);
        }
    }
    class Boolean extends Data {
        boolean value;
        Boolean() {
            value = true;
        }
        public void DisplayValue(){
            System.out.println (value);
        }
    }
    // Pattern Classes
    abstract class Factory {
        abstract public Data CreateDataObject();
    }
    class IntFactory extends Factory {
        public Data CreateDataObject(){
            return new Integer();
        }
    }
    class BooleanFactory extends Factory {
        public Data CreateDataObject(){
            return new Boolean();
        }
    }
    //Client classes
    class Document {
        Data pd;
        Document(Factory pf){
            pd = pf.CreateDataObject();
        }
        public void DisplayData(){
            pd.DisplayValue();
        }
    }
    //Test class
    public class MyDoc {
        static Document d;
        public static void main(String[] args) {
            d = new Document(new BooleanFactory());
            d.DisplayData();
        }
    }
    

    如此,再class Boolean extends Dataclass BooleanFactory extends Factory即可使系统支持Boolean

    • 运行结果

    (四)以TDD的方式开发一个复数类Complex

    • 要求
    // 定义属性并生成getter,setter
    double RealPart;
    double ImagePart;
    // 定义构造函数
    public Complex()
    public Complex(double R,double I)
    
    //Override Object
    public boolean equals(Object obj)
    public String toString()
    
    // 定义公有方法:加减乘除
    Complex ComplexAdd(Complex a)
    Complex ComplexSub(Complex a)
    Complex ComplexMulti(Complex a)
    Complex ComplexDiv(Complex a)
    
    • 代码编写
    public class Complex{
        private double r;
        private double i;
        public Complex(double r, double i) {
            this.r = r;
            this.i = i;
        }
    
        public static double getRealPart(double r) {
            return r;
        }
    
        public static double getImagePart(double i) {
            return i;
        }
    
        public Complex ComplexAdd(Complex c) {
            return new Complex(r + c.r, i + c.i);
        }
        public Complex ComplexSub(Complex c) {
            return new Complex(r - c.r, i - c.i);
        }
        public Complex ComplexMulti(Complex c) {
            return new Complex(r * c.r - i * c.i, r * c.i + i * c.r);
        }
        public Complex ComplexDiv(Complex c) {
            return new Complex((r * c.i + i * c.r)/(c.i * c.i + c.r * c.r), (i * c.i + r * c.r)/(c.i * c.i + c.r * c.r));
        }
    
        public String toString() {
            String s = " ";
            if (i > 0)
                s =  r + "+" + i + "i";
            if (i == 0)
                s =  r + "";
            if (i < 0)
                s = r + " " + i + "i";
            return s;
        }
    }
    

    (五)使用WhiteStarUML对实验二中的代码进行建模,发类图的截图,加上学号水印。类图中只少两个类。

    遇到问题及解决方案

    • 问题一:看教程,本来应该在插件安装对话框的搜索中输入junit,单击JunitGenerator V2.0,单击绿色的Install按钮安装。但我没有搜到JunitGenerator V2.0

    • 问题一解决方案:通过百度搜索,在网上查找并下载了http://plugins.jetbrains.com/pluginManager/?action=download&id=org.intellij.plugins.junitgen&build=IU-162.2228.15&uuid=6a6cb9f5-4107-46d7-9b1c-d8205218a73b,到本地,然后找到插件所在位置,再install plugin from disk,。

    • 问题二:在进行第二步操作时,出现标红,测试未通过。

    • 问题二解决方案:把数据17换成5就可以了。

    统计PSP(Personal Software Process)时间:

    步骤 耗时 百分比
    设计 120min 50%
    代码实现 60 25%
    测试 30 12.5%
    分析总结 30 12.5%

    实验小结

    本次实验主要学会了如何使用junit来测试代码。在不断调试中,发现junit有他得天独厚之处,方便,简洁,快速,收获很大。

  • 相关阅读:
    Visual Studio 2015 密钥
    Vue-next源码新鲜出炉一
    vue2.0基础整理
    Nest
    Nest
    Nest
    Nest
    Nest快速上手
    element-plus源码分析第一节
    获取视频第一帧,作为封面图
  • 原文地址:https://www.cnblogs.com/musea/p/8847737.html
Copyright © 2011-2022 走看看