实验二 面向对象程序设计

实验二 面向对象程序设计

面向对象程序设计-1

参考

单元测试

三种代码
  • 伪代码
  • 产品代码
  • 测试代码

需求:我们要在一个MyUtil类中解决一个百分制成绩转成“优、良、中、及格、不及格”五级制成绩的功能。

伪代码:

百分制转五分制:
   如果成绩小于60,转成“不及格”
   如果成绩在60与70之间,转成“及格”
   如果成绩在70与80之间,转成“中等”
   如果成绩在80与90之间,转成“良好”
   如果成绩在90与100之间,转成“优秀”
   其他,转成“错误”

产品代码MyUtil.java

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 "错误";
   }
}

Java编程时,程序员对类实现的测试叫单元测试。类XXXX单元测试,我们一般写建一个XXXXTest的类,针对MyUtil类我们写一个MyUtilTest.java的测试模块,这里我们设计了一个测试用例(TestCase)测试用例是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。
测试代码:

正常情况:

public class MyUtilTest {
    public static void main(String[] args) {
        //测试正常情况
        if(MyUtil.percentage2fivegrade(55) != "不及格")
            System.out.println("test failed!");
        else if(MyUtil.percentage2fivegrade(65) != "及格")
            System.out.println("test failed!");
        else if(MyUtil.percentage2fivegrade(75) != "中等")
            System.out.println("test failed!");
        else if(MyUtil.percentage2fivegrade(85) != "良好")
            System.out.println("test failed!");
        else if(MyUtil.percentage2fivegrade(95) != "优秀")
            System.out.println("test failed!");
        else 
            System.out.println("test passed!");
    }
}

边界情况:

public class MyUtilTest {
    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!"); 
    }
}

错误情况:

public class MyUtilTest {
    public static void main(String[] args) {
        //测试出错情况
        if(MyUtil.percentage2fivegrade(-10) != "错误")
            System.out.println("test failed 1!");
        else if(MyUtil.percentage2fivegrade(115) != "错误")
            System.out.println("test failed 2!");
        else 
            System.out.println("test passed!");
    }
}

提交最后三个测试用例都通过的截图,截图上要有画图加水印,输入自己的学号。

产品代码:

public class MyUtil{
    public static String percentage2fivegrade(int grade){
        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 "优秀";
            //其他,转成“错误”
        else
            return "错误";
    }
}

测试代码:

截图:

面向对象程序设计-2

参考 积极主动敲代码,使用JUnit学习Java

StringBuffer的例子,代码如下:

1 public class StringBufferDemo{        
2   public static void main(String [] args){    
3       StringBuffer buffer = new StringBuffer(20);    
4       buffer.append('S');     
5       buffer.append("tringBuffer");     
6       System.out.println(buffer.charAt(1));     
7       System.out.println(buffer.capacity();     
8       System.out.println(buffer.indexOf("tring12345"));    
9       System.out.println("buffer = " + buffer.toString());
10      System.out.println(buffer.length());
11  }    
12}    

以 TDD的方式研究学习StringBuffer,提交你的单元测试用例和测试通过的截图,截图要加上学号水印。

参考StringBuffer类型

产品代码:

public class StringBufferDemo {
    StringBuffer buffer = new StringBuffer();
    public StringBufferDemo(StringBuffer buffer){
        this.buffer = buffer;
    }
    public Character charAT(int i){
        return buffer.charAt(i);
    }
    public int capacity(){
        return buffer.capacity();
    }
    public int length(){
        return buffer.length();
    }
    public int indexOf(String buf){
        return buffer.indexOf(buf);
    }
}

测试代码:

截图:

面向对象程序设计-3

对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理解设计模式

// Server Classes 
abstract class Data { 
    abstract public void DisplayValue(); 
}
class Integer extends  Data {    
    int value; 
    Integer() {
         value=100; 
    }  
    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(); 
   } 
} 
//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 IntFactory()); 
            d.DisplayData(); 
    }   
}

用自己的学号%6进行取余运算,根据结果进行代码扩充:

0: 让系统支持Byte类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印

1: 让系统支持Short类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印

2: 让系统支持Boolean类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印

3: 让系统支持Long类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印

4: 让系统支持Float类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印

5: 让系统支持Double类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印

截图:

面向对象程序设计-4

任务:以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 {
    // 定义属性并生成getter,setter
    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;
    }

    //Override Object
    public boolean equals(Object obj) {

        Complex complex = (Complex) obj;
        if (complex.r != r) {
            return false;
        }
        if (complex.i != i) {
            return false;
        }
        return true;
    }

    public String toString() {
        String str = new String();
        if (i == 0) str = r + "";
        else if (i < 0) str = r + "" + i + "i";
        else str = r + "" + "+" + i + "i";
        return str;
    }

    // 定义公有方法:加减乘除
    Complex ComplexAdd(Complex a) {
        return new Complex(r + a.r, i + a.i);
    }

    Complex ComplexSubtract(Complex a) {
        return new Complex(r - a.r, i - a.i);
    }

    Complex ComplexMultiply(Complex a) {
        return new Complex(r * a.r - i * a.i, r * a.i + i * a.r);
    }

    Complex ComplexDivide(Complex a) {
        return new Complex((r * a.r + i * a.i) / (a.r * a.r + a.i * a.i), (i * a.r - r * a.i) / (a.r * a.r + a.i * a.i));
    }
}

测试代码:

截图:

面向对象程序设计-5

public abstract class Animal {
    private String color;
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
    public abstract String shout(); 
}
public class Dog extends Animal{
    public String shout(){
        return "汪汪";
    }
       public String toString(){
        return "The Dog's color is " + this.getColor() +", and it shouts "+ this.shout() + "!";
    }
}
public class Cat extends Animal{
    public String shout(){
        return "喵喵";
    }
    public String toString(){
        return "The Cat's color is " + this.getColor() +", and it shouts "+ this.shout() + "!";
    }
}

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

类图中至少两个类。

截图:

练习

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

(面向对象程序设计-4)

PSP时间

步骤 耗时 百分比
需求分析 15min 4.55%
设计 35min 10.61%
代码实现 180min 54.545%
测试 60min 18.182%
分析总结 40min 12.121%
posted @ 2017-04-23 12:11  弥光  阅读(382)  评论(0编辑  收藏  举报