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

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

1、实验前期预习准备

Junit的安装和配置

  • 选择File->Setting打开设置对话框,在设置对话框中选择Plugins, 单击Install JetBrains plugin...按钮打开插件安装界面:
  • 在插件安装对话框的搜索中输入junit,单击JunitGenerator V2.0,单击右边绿色的Install1按钮安装:
  • 结果以下

2、实验内容与主要步骤

提交点1:测试MyUtil类

  • 实验要求
    • 参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST
    • 参考http://www.cnblogs.com/rocedu/p/6736847.html
    • 提交最后三个测试用例都经过的截图,截图上要有画图加水印,输入本身的学号。
  • 实验过程
    • 产品代码
    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 "错误";
      }
    }
    • 测试代码
    import org.junit.Test;
    import junit.framework.TestCase;
    public class MyUtilTest extends TestCase {
      @Test
      public void testNormal() {
          assertEquals("不及格", MyUtil.percentage2fivegrade(55));
          assertEquals("及格", MyUtil.percentage2fivegrade(65));
          assertEquals("中等", MyUtil.percentage2fivegrade(75));
          assertEquals("良好", MyUtil.percentage2fivegrade(85));
          assertEquals("优秀", MyUtil.percentage2fivegrade(95));
      }
      @Test
      public void testExceptions() {
          assertEquals("错误", MyUtil.percentage2fivegrade(-55));
          assertEquals("错误", MyUtil.percentage2fivegrade(105));
      }
      @Test
      public void testBoundary() {
          assertEquals("不及格", MyUtil.percentage2fivegrade(0));
          assertEquals("及格", MyUtil.percentage2fivegrade(60));
          assertEquals("中等", MyUtil.percentage2fivegrade(70));
          assertEquals("良好", MyUtil.percentage2fivegrade(80));
          assertEquals("优秀", MyUtil.percentage2fivegrade(90));
          assertEquals("优秀", MyUtil.percentage2fivegrade(100));
      }
    }
  • 运行测试结果

提交点2:以TDD的方式研究学习StringBuffer

  • 实验要求
    • 参考 积极主动敲代码,使用JUnit学习Java (http://www.cnblogs.com/rocedu/p/4837092.html)
    • 参考http://www.cnblogs.com/rocedu/p/6736847.html
    • 以 TDD的方式研究学习StringBuffer,提交你的单元测试用例和测试经过的截图,截图要加上学号水印。
  • 实验过程
    • 产品代码
    public class StringBufferDemo {
      public static void main(String [] args){
                StringBuffer buffer = new StringBuffer(20);
                buffer.append('S');
                buffer.append("tringBuffer");
               System.out.println(buffer.charAt(1));
                System.out.println(buffer.capacity());
         System.out.println(buffer.indexOf("tring"));
          System.out.println("buffer = " + buffer.toString());
          System.out.println(buffer.length());
      }
    }
    • 测试代码
    import junit.framework.TestCase;
    import org.junit.Test;
    public class StringBufferDemoTest extends TestCase {
      StringBuffer a = new StringBuffer("StringBuffer");
      StringBuffer b = new StringBuffer("StringBufferStringBuffer");
      StringBuffer c = new StringBuffer("StringBufferStringBufferStringBuffer");
      @Test
      public void testcharAt() throws Exception {
      assertEquals('t', a.charAt(1));
      assertEquals('g', a.charAt(5));
      assertEquals('r', a.charAt(11));
      }
      @Test
      public void testcapacity() throws Exception {
          assertEquals(28, a.capacity());
          assertEquals(40, b.capacity());
          assertEquals(52, c.capacity());
      }
      @Test
      public void testlength() throws Exception {
          assertEquals(12, a.length());
          assertEquals(24, b.length());
          assertEquals(36, c.length());
      }
      @Test
      public void testindexOf() throws Exception {
          assertEquals(0, a.indexOf("Str"));
          assertEquals(5, b.indexOf("gBu"));
          assertEquals(8, c.indexOf("ffer"));
      }
    }
  • 实验结果截图

提交点3:对设计模式示例进行扩充

  • 实验要求
    • 参考http://www.cnblogs.com/rocedu/p/6736847.html
    • 对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理解设计模式
      • 用本身的学号%6进行取余运算,根据结果进行代码扩充:
      • 0: 让系统支持Byte类,并在MyDoc类中添加测试代码代表添加正确,提交测试代码和运行结的截图,加上学号水印
      • 1: 让系统支持Short类,并在MyDoc类中添加测试代码代表添加正确,提交测试代码和运行结的截图,加上学号水印
      • 2: 让系统支持Boolean类,并在MyDoc类中添加测试代码代表添加正确,提交测试代码和运行结的截图,加上学号水印
      • 3: 让系统支持Long类,并在MyDoc类中添加测试代码代表添加正确,提交测试代码和运行结的截图,加上学号水印
      • 4: 让系统支持Float类,并在MyDoc类中添加测试代码代表添加正确,提交测试代码和运行结的截图,加上学号水印
      • 5: 让系统支持Double类,并在MyDoc类中添加测试代码代表添加正确,提交测试代码和运行结的截图,加上学号水印
  • 实验代码
abstract class Data {
    abstract public void DisplayValue();
}
class Integer extends  Data {
    int value;
    Integer() {
        value=20175226%6;
    }
    public void DisplayValue(){
        System.out.println (value);
    }
}
class Byte extends  Data {
   byte value;
   Byte() {
        value=20175226%6;
    }
    public void DisplayValue(){
        System.out.println (value);
    }
}
class Short extends  Data {
    short value;
    Short() {
        value=20175226%6;
    }
    public void DisplayValue(){
        System.out.println (value);
    }
}
class Boolean extends  Data {
    boolean value;
    Boolean() {
        value=20175226%6==4;
    }
    public void DisplayValue(){
        System.out.println (value);
    }
}
class Long extends  Data {
    long value;
    Long() {
        value=20175226;
    }
    public void DisplayValue(){
        System.out.println (value);
    }
}
class Double extends  Data {
    double value;
    Double() {
        value=20175226%6;
    }
    public void DisplayValue(){
        System.out.println (value);
    }
}
class Float extends  Data {
    float value;
    Float() {
        value=20175226%6;
    }
    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 ByteFactory extends Factory {
    public Data CreateDataObject(){
        return new Byte();
    }
}
class ShortFactory extends Factory {
    public Data CreateDataObject(){
        return new Short();
    }
}
class BoolenFactory extends Factory {
    public Data CreateDataObject(){
        return new Boolean();
    }
}
class LongFactory extends Factory {
    public Data CreateDataObject(){
        return new Long();
    }
}
class DoubletFactory extends Factory {
    public Data CreateDataObject(){
        return new Double();
    }
}
class FloatFactory extends Factory {
    public Data CreateDataObject(){
        return new Float();
    }
}
//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();
        d = new Document(new ByteFactory());
        d.DisplayData();
        d = new Document(new ShortFactory());
        d.DisplayData();
        d = new Document(new BoolenFactory());
        d.DisplayData();
        d = new Document(new LongFactory());
        d.DisplayData();
        d = new Document(new DoubletFactory());
        d.DisplayData();
        d = new Document(new FloatFactory());
        d.DisplayData();
    }
}
  • 实验结果

提交点4:以TDD的方式开发一个复数类Complex

  • 实验要求
    • 方式开发一个复数类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
    double RealPart;
    double ImagePart;
    // 定义构造函数
    public Complex(){
        RealPart = 0;
        ImagePart = 1;
    }
    public Complex(double R,double I){
        ImagePart = I;
        RealPart = R;
    }

    //Override Object
    public boolean equals(Object obj){
        if(this == obj) {
            return true;
        }
        if(!(obj instanceof Complex)) {
            return false;
        }
        Complex complex = (Complex) obj;
        if(complex.RealPart != ((Complex) obj).RealPart) {
            return false;
        }
        if(complex.ImagePart != ((Complex) obj).ImagePart) {
            return false;
        }

        return true;
    }
    public String toString()   {
        String string = "";
        if (ImagePart > 0)
            string =  RealPart + "+" + ImagePart + "i";
        if (ImagePart == 0)
            string =  RealPart + "";
        if (ImagePart < 0)
            string = RealPart + " " + ImagePart + "i";
        return string;
    }
    // 定义公有方法:加减乘除
    Complex ComplexAdd(Complex a) {
        double b=0,c=0;
        b = RealPart+a.RealPart;
        c = ImagePart+a.ImagePart;
        System.out.println("("+RealPart+"+"+ImagePart+"i) + ("+a.RealPart+"+"+a.ImagePart+") = "+b+"+"+c+"i");
        return  new Complex(b,c);
    }
    Complex ComplexSub(Complex a) {
        double b=0,c=0;
        b = RealPart-a.RealPart;
        c = ImagePart-a.ImagePart;
        System.out.println("("+RealPart+"+"+ImagePart+"i) - ("+a.RealPart+"+"+a.ImagePart+") = "+b+"+"+c+"i");
        return  new Complex(b,c);
    }
    Complex ComplexMulti(Complex a) {
        double b=0,c=0;
        b = RealPart*a.RealPart;
        c = ImagePart*a.ImagePart;
        System.out.println("("+RealPart+"+"+ImagePart+"i) * ("+a.RealPart+"+"+a.ImagePart+") = "+b+"+"+c+"i");
        return  new Complex(b,c);
    }
    Complex ComplexDiv(Complex a) {
        if(a.RealPart==0||a.ImagePart==0) {
            System.out.println("被除数不能为0,错误");
            return new Complex();
        }

        double d = Math.sqrt(a.RealPart*a.RealPart)+Math.sqrt(a.ImagePart*a.ImagePart);
        double b=0,c=0;
        b = (RealPart*a.RealPart+ImagePart*a.ImagePart)/d;
        c = Math.round((RealPart*a.ImagePart-ImagePart*a.RealPart)/d);
        System.out.println("("+RealPart+"+"+ImagePart+"i) / ("+a.RealPart+"+"+a.ImagePart+") = "+b+"+"+c+"i");
        return  new Complex(b,c);
    }
}
- 测试代码
import junit.framework.TestCase;
import org.junit.Test;
public class ComplexTest extends TestCase {
    Complex complex = new Complex(1, 1);
    @Test
    public void testAdd() {
        assertEquals(new Complex(3.0, 3.0), complex.ComplexAdd(new Complex(2.0, 2.0)));
    }
    @Test
    public void testSub() {
        assertEquals(new Complex(-5.0, -2.0), complex.ComplexSub(new Complex(6.0, 3.0)));
    }
    @Test
    public void testMulti() {
        assertEquals(new Complex(3.0, 2.0), complex.ComplexMulti(new Complex(3.0, 2.0)));
    }
    @Test
    public void testDiv() {
        assertEquals(new Complex(1.0, 1.0), complex.ComplexDiv(new Complex(1.0, 1.0)));
        assertEquals(new Complex(0.0, 0.0), complex.ComplexDiv(new Complex(1.0, 0.0)));
        //边缘测试
    }
}
  • 结果截图

提交点5:类图

实验中碰到的问题

  • 问题1:在第二个提交点写测试类时,测试charAt方法时我写的语句是
public void testcharAt() throws Exception {
    assertEquals("t", a.charAt(1));
    assertEquals("g", a.charAt(5));
    assertEquals("r", a.charAt(11));
    }

结果发现怎么样测试都是红色条,不经过。html

  • 问题1解决过程:通过反复测试我将测试的代码换成了下面这样才能经过
public void testcharAt() throws Exception {
    assertEquals('t', a.charAt(1));
    assertEquals('g', a.charAt(5));
    assertEquals('r', a.charAt(11));
    }

这个问题体现了一些咱们的细节,像两个字符串比较同样,虽然" s "' s '看起来内容如出一辙但事实上二者比较起来二者之间有很大差别。二者占用的内存空间就不同至少会有"\0".因此显而易见字符能够被视为长度为1的字符串这个想法是错误的。git

(代码托管)[https://gitee.com/wpyzka/20175226/tree/master/src/shiyan2]设计模式

步骤 耗时 百分比
需求分析 10min 5.7%
设计 25min 14.7%
代码实现 80min 47.1%
测试 10min 5.7%
分析总结 45min 26.5%
相关文章
相关标签/搜索