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

一、实验内容及步骤

(一)单元测试

(1)三种代码

  • 举例:我们要在一个MyUtil类中解决一个百分制成绩转成“优、良、中、及格、不及格”五级制成绩的功能。
  • 测试结果:

java定义复数类complex java定义复数类实验报告_设计模式

java定义复数类complex java定义复数类实验报告_单元测试_02

java定义复数类complex java定义复数类实验报告_java定义复数类complex_03

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

  • 测试结果:

java定义复数类complex java定义复数类实验报告_java定义复数类complex_04

  • 参考StringBuffer的用法加强理解。

(二)面向对象三要素

(1) 抽象

(2) 封装、继承与多态

  • 使用StarUML对实验二中的代码进行建模,发类图的截图,加上学号水印。

java定义复数类complex java定义复数类实验报告_解决方案_05

(三)设计模式初步

对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理解设计模式。让系统支持Double类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印。

java定义复数类complex java定义复数类实验报告_java定义复数类complex_06

二、实验练习:使用TDD的方式设计关实现复数类Complex

  • 必备知识
  • 设计内容
  1. 伪代码
复数运算:
定义复数
定义构造函数
定义共有方法:加减乘除
  1. 产品代码
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 a) {
        return new Complex(r + a.r, i + a.i);
    }
    public Complex ComplexSub(Complex a) {
        return new Complex(r - a.r, i - a.i);
    }
    public Complex ComplexMulti(Complex a) {
        return new Complex(r * a.r - i * a.i, r * a.i + i * a.r);
    }
    public Complex ComplexDiv(Complex a) {
        return new Complex((r * a.i + i * a.r)/(a.i * a.i + a.r * a.r), (i * a.i + r * a.r)/(a.i * a.i + a.r * a.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;
    }
}
  1. 测试代码

java定义复数类complex java定义复数类实验报告_java定义复数类complex_07

三、总结与分析

(一)遇到的问题及解决方案

  • 问题1:在自己的file里找不到settings,上网查也找不到。
  • 问题1解决方案:后来在开始页面的configure设置里找到了plugins,再选其中的browse,就能设置了

java定义复数类complex java定义复数类实验报告_java定义复数类complex_08

  • 问题2:在测试stringbuffer时,总是出现这样的情况:

java定义复数类complex java定义复数类实验报告_设计模式_09

  • 问题2解决方案:看了一下Intellj IDEA 简易教程中的测试代码,更改了一下test里类的名字,把T改成t,便能成功运行。

java定义复数类complex java定义复数类实验报告_单元测试_10

  • 问题3:在starUML中add一个operation时找不到type

java定义复数类complex java定义复数类实验报告_单元测试_11

  • 问题3解决方案:直接写名字的时候加上。但是()就会出现在最后而不是中间。

(二)PSP

步骤

耗时

百分比

需求分析

20min

16%

设计

30min

24%

代码实现

50min

40%

测试

5min

4%

分析总结

20min

16%

(三)总结单元测试的好处

  • 就我个人的感受而言,单元测试提供了一种高效快速的测试代码正确性的方法。一开始不知道怎么做,参考了关于单元测试。自己有了很多思考,成长了许多。