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

20145212 实验二《 Java面向对象程序设计》

实验内容

单元测试

三种代码

  • 伪代码
百分制转五分制: 
如果成绩小于60,转成“不及格” 
如果成绩在60与70之间,转成“及格” 
如果成绩在70与80之间,转成“中等” 
如果成绩在80与90之间,转成“良好” 
如果成绩在90与100之间,转成“优秀” 
其他,转成“错误”
  • 产品代码
public class MyUtil {
    public static String percentage2fivegrade(int grade){
        //如果成绩小于60,转成“不及格”
        if (grade < 60)
            return "不及格";
            //如果成绩在60与70之间,转成“及格”
        else if (grade < 70)
            return "及格";
            //如果成绩在70与80之间,转成“中等”
        else if (grade < 80)
            return "中等";
            //如果成绩在80与90之间,转成“良好”
        else if (grade < 90)
            return "良好";
            //如果成绩在90与100之间,转成“优秀”
        else if (grade < 100)
            return "优秀";
            //其他,转成“错误”
        else
            return "错误";
    }
}
  • 边界情况测试代码
public class MyUtil1Test1 {
    public static void main(String[] args) {
        //测试边界情况
        if(MyUtil.percentage2fivegrade(0) != "不及格")
            System.out.println("test failed 1!");
        else if(MyUtil.percentage2fivegrade(60) != "及格")
            System.out.println("test failed 2!");
        else if(MyUtil.percentage2fivegrade(70) != "中等")
            System.out.println("test failed 3!");
        else if(MyUtil.percentage2fivegrade(80) != "良好")
            System.out.println("test failed 4!");
        else if(MyUtil.percentage2fivegrade(90) != "优秀")
            System.out.println("test failed 5!");
        else if(MyUtil.percentage2fivegrade(100) != "优秀")
            System.out.println("test failed 6!");
        else
            System.out.println("test passed!");
    }
}

  • 修改代码后测试边界情况
        if(MyUtil.percentage2fivegrade(0) != "不及格")
            System.out.println("test failed 1!");
        else if(MyUtil.percentage2fivegrade(60) != "及格")
            System.out.println("test failed 2!");
        else if(MyUtil.percentage2fivegrade(70) != "中等")
            System.out.println("test failed 3!");
        else if(MyUtil.percentage2fivegrade(80) != "良好")
            System.out.println("test failed 4!");
        else if(MyUtil.percentage2fivegrade(90) != "优秀")
            System.out.println("test failed 5!");
        else if(MyUtil.percentage2fivegrade(100) != "优秀")
            System.out.println("test failed 6!");
        else            System.out.println("test passed!");

面向对象三要素

1.抽象
(1)抽象就是抽出事物的本质特征而暂时不考虑他们的细节,对于复杂系统问题人们借助分层次抽象的方法进行问题求解。
(2)在抽象的最高层,可以使用问题环境的语言,以概括的方式叙述问题的解。在抽象的较低层,则采用过程化的方式进行描述。
(3)在描述问题解时,使用面向问题和面向实现的术语。
(4)程序设计中,抽象包括两个方面,一是过程抽象,二是数据抽象。过程抽象的结果是函数,数据抽象的结果是抽象数据类型。

2.封装、继承与多态
(1)面向对象(Object-Oriented)的三要素包括:封装、继承、多态。
(2)封装实际上使用方法(method)将类的数据隐藏起来,控制用户对类的修改和访问数据的程度,从而带来模块化和信息隐藏的好处。
(3)接口是封装的准确描述手段。

TDD的使用

1.TDD的一般步骤如下:

明确当前要完成的功能;
记录成一个测试列表;
快速完成编写针对此功能的测试用例;
测试代码编译不通过;
编写并完善产品代码;
测试通过;
对代码进行重构,并保证测试通过;
循环完成所有功能的开发。

2.TDD的编码节奏是:
增加测试代码,JUnit出现红条;修改产品代码;JUnit出现绿条,任务完成。

3.在IDEA中设置使得IDEA具备单元测试功能

public class MyUtil{
   public static String percentage2fivegrade(int grade){
       //如果成绩小于0,转成“错误”
       if ((grade < 0))
           return "错误";
       //如果成绩小于60,转成“不及格”
       else if (grade < 60)
           return "不及格";
       //如果成绩在60与70之间,转成“及格”
       else if (grade < 70)
           return "及格";
       //如果成绩在70与80之间,转成“中等”
       else if (grade < 80)
           return "中等";
       //如果成绩在80与90之间,转成“良好”
       else if (grade < 90)
           return "良好";
       //如果成绩在90与100之间,转成“优秀”
       else if (grade <= 100)
           return "优秀";
       //如果成绩大于100,转成“错误”
       else
           return "错误";
   }
}

4.完善代码

复数类Complex

  • 首先编写一段实现复数加减乘的代码如下
public class ComplexNumber { // 复数类
    double m_dRealPart;  // 实部
    double m_dImaginPart; // 虚部
    ComplexNumber(double m_dRealPart,double m_dImaginPart){ // 带参数的构造方法
        this.m_dRealPart = m_dRealPart;
        this.m_dImaginPart = m_dImaginPart;
    }
    public ComplexNumber() {
        // TODO Auto-generated constructor stub
    }
    public double getRealPart() {
        return m_dRealPart;
    }
    public void setRealPart(double m_dRealPart) {
        this.m_dRealPart = m_dRealPart;
    }
    public double getImaginPart() {
        return m_dImaginPart;
    }
    public void setImaginPart(double m_dImaginPart) {
        this.m_dImaginPart = m_dImaginPart;
    }
    ComplexNumber add(ComplexNumber a){ // 复数相加
        double m_dRealPart2 = a.getRealPart();
        double m_dImaginPart2 = a.getImaginPart();
        double newM_dRealPart = m_dRealPart +  m_dRealPart2;
        double newM_dImaginPart = m_dImaginPart + m_dImaginPart2;
        ComplexNumber result = new ComplexNumber(newM_dRealPart,newM_dImaginPart);
        return result;
    }
    ComplexNumber sub(ComplexNumber a){ // 复数相减
        double m_dRealPart2 = a.getRealPart();
        double m_dImaginPart2 = a.getImaginPart();
        double newM_dRealPart = m_dRealPart - m_dRealPart2;
        double newM_dImaginPart = m_dImaginPart - m_dImaginPart2;
        ComplexNumber result = new ComplexNumber(newM_dRealPart,newM_dImaginPart);
        return result;
    }
    ComplexNumber mul(ComplexNumber a){ // 复数相乘
        double m_dRealPart2 = a.getRealPart();
        double m_dImaginPart2 = a.getImaginPart();
        double newM_dRealPart = m_dRealPart* m_dRealPart2 - m_dImaginPart*m_dImaginPart2;
        double newM_dImaginPart = m_dImaginPart* m_dRealPart2 +  m_dRealPart*m_dImaginPart2;
        ComplexNumber result = new ComplexNumber(newM_dRealPart,newM_dImaginPart);
        return result;
    }

    public void print(){ // 用于格式化输出
        if(m_dImaginPart > 0){
            System.out.println(m_dRealPart + " + " + m_dImaginPart + "i");
        }else if(m_dImaginPart < 0){
            System.out.println( m_dRealPart+ "" + m_dImaginPart + "i");
        }else{
            System.out.println( m_dRealPart);
        }
    }
    // 封装了具体运算,主要为对输入进行转换,对输出封装
    public static void talk(String data1_1,String data1_2,String data2_1,String data2_2,String operation){
        // 以下语句为格式转换
        double dat1_1 = Double.parseDouble(data1_1); 
        double dat1_2 = Double.parseDouble(data1_2.substring(0,data1_2.length()-1));
        double dat2_1 = Double.parseDouble(data2_1);
        double dat2_2 = Double.parseDouble(data2_2.substring(0,data2_2.length()-1));
        ComplexNumber num1 = new ComplexNumber(dat1_1,dat1_2);
        ComplexNumber num2 = new ComplexNumber(dat2_1,dat2_2);
        ComplexNumber result;
        int a,b;
        if(operation.equals("+")){ // 两数相加
            result = num1.add(num2);
            result.print();
        }
        if(operation.equals("-")){ // 两数相减
            result = num1.sub(num2);
            result.print();
        }
        if(operation.equals("*")){ // 两数相乘
            result = num1.mul(num2);
            result.print();
        }
    }
}
  • 编写一段测试代码
public class MainClass { // 用于测试复数类
    public static void main(String[] args) {
        ComplexNumber ComplexNumber = new ComplexNumber();
        System.out.println("测试1:————————-");  // 一般测试
        ComplexNumber.talk("5", "4i", "3", "6i", "+");
        ComplexNumber.talk("5", "4i", "3", "6i", "-");
        ComplexNumber.talk("5", "4i", "3", "6i", "*");
        
        System.out.println("\n测试2:————————-"); // 包含负数测试
        ComplexNumber.talk("-2","4i", "5", "-8i","+");
        ComplexNumber.talk("-2","4i", "5", "-8i","-");
        ComplexNumber.talk("-2","4i", "5", "-8i","*");

        System.out.println("\n测试3:————————-"); // 包含小数测试
        ComplexNumber.talk("-1.2","3.1i","4.3","-6.5i","+");
        ComplexNumber.talk("-1.2","3.1i","4.3","-6.5i","-");
        ComplexNumber.talk("-1.2","3.1i","4.3","-6.5i","*");

        System.out.println("\n测试4:————————-"); // 一般测试
        ComplexNumber.talk("5", "4i", "0", "0i", "+");
        ComplexNumber.talk("5", "4i", "0", "0i", "-");
        ComplexNumber.talk("5", "4i", "0", "0i", "*");

    }
}

结果如下图:

UML应用

  • 用WhiteStarUML生成JAVA代码

PSP时间

步骤 耗时 百分比
需求分析 30min 25.0%
设计 20min 16.7%
代码实现 40min 33.3%
测试 20min 16.7%
分析总结 10min 8.3%
posted @ 2016-04-14 21:56  20145212罗天晨  阅读(175)  评论(1编辑  收藏  举报