实验二 Java面向对象程序设计 20175301李锦然实验报告

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

实验内容

1. 初步掌握单元测试和TDD

2. 理解并掌握面向对象三要素:封装、继承、多态

3. 初步掌握UML建模

4. 熟悉S.O.L.I.D原则

5. 了解设计模式

根据实验提交的规则,把实验为五个部分

面向对象程序设计-1

实验要求:

  • 参考:> http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST
  • 参考:> http://www.cnblogs.com/rocedu/p/6736847.html
  • 提交最后三个测试用例都通过的截图,截图上要有画图加水印,输入自己的学号。

实验步骤:

在IDEA中新建一个工程,然后建立MyUtil类还有检查用的类,下图是最初的类(改了名,问题不大)

然后导入最初的程序

然后看看检验程序结果

果然出错了,检查出错原因是因为不及格的成绩不对啊

修改及格成绩为60,然后继续检测,这次通过了

然后来检测边界情况

看输出是满分出了问题这里输出时faild6遮住了

修改程序然后再检测通过

最终程序:

 补一个用junit的,虽然这个实验要求上没有

测试代码如下:

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(105));
        assertEquals("错误", MyUtil.percentage2fivegrade(-55));
    }
    @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

实验要求:

  • 参考积极主动敲代码,使用JUnit学习Java >http://www.cnblogs.com/rocedu/p/4837092.html
  • 参考>http://www.cnblogs.com/rocedu/p/6736847.html
  • 以 TDD的方式研究学习StringBuffer,提交你的单元测试用例和测试通过的截图,截图要加上学号水印。

实验步骤:

其实我并不喜欢在idea上面编程,但是思考之后确实IDEA更便于发现错误,工具更多,比如这次的junit直接在IDEA中配置就可以了

还有TDD方法第一个例子

然后就开始用JUNIT对StringBufferDemo动手啦

1 正式代码

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

2 测试代码

import junit.framework.TestCase;
import org.junit.Test;

public class StringBufferDemoTest extends TestCase {
    StringBuffer a = new StringBuffer("StringBuffer");//测试12个字符(<=16)
    StringBuffer b = new StringBuffer("StringBufferStringBuffer");//测试24个字符(>16&&<=34)
    StringBuffer c = new StringBuffer("StringBufferStringBufferStringBuffer");//测试36个字符(>34)
    @Test
    public void testcharAt(){
        assertEquals('S',a.charAt(0));
        assertEquals('B',a.charAt(6));
        assertEquals('r',a.charAt(11));
    }
    @Test
    public void testcapacity(){
        assertEquals(28,a.capacity());
        assertEquals(40,b.capacity());
        assertEquals(52,c.capacity());
    }
    @Test
    public void testlength(){
        assertEquals(12,a.length());
        assertEquals(24,b.length());
        assertEquals(36,c.length());
    }
    @Test
    public void testindexOf(){
        assertEquals(0,a.indexOf("Str"));
        assertEquals(6,a.indexOf("Buff"));
        assertEquals(10,a.indexOf("er"));
    }
}

3 测试结果

ALLPASS

实验二 Java面向对象程序设计-3

实验要求:
参考http://www.cnblogs.com/rocedu/p/6736847.html
对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理解设计模式
让系统支持Float类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印

实验步骤:

代码:

abstract class Data { 
    abstract public void DisplayValue(); 
}
class Integer extends  Data {    
    int value; 
    Integer() {
         value=100; 
    }  
    public void DisplayValue(){
        System.out.println (value);
    } 
 }
class Float extends  Data {
    float value;
    Float() {
        value=2.017531F;
    }
    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 FloatFactory extends Factory {
    public Data CreateDataObject(){
        return new Float();
    }
}
class Document {    //Client classes
    Data pd; 
    Document(Factory pf){ 
       pd = pf.CreateDataObject(); 
    } 
    public void DisplayData(){
       pd.DisplayValue(); 
   } 
 } 
 //Test class
 public class MyDoc {
    static Document d,f;
    public static void main(String[] args) {
            d = new Document(new IntFactory()); 
            d.DisplayData();
            f = new Document(new FloatFactory());
            f.DisplayData();
    }   
}

correct

实验二 面向对象程序设计-4

实验要求:

提交:单元测试代码和运行成功截图及码云上代码链接,截图要加上学号水印

参考http://www.cnblogs.com/rocedu/p/6736847.html

任务:以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)

 

实验步骤:

代码:

import java.util.Objects;
import java.lang.Integer;

public class Complex {
    double RealPart;
    double ImagePart;
    public Complex() {
    }

    public Complex(double R,double I)
    {
        RealPart = R;
        ImagePart = I;

    }
    public double getterRealPart(){
        return RealPart;
    }
    public double getterImagePart(){
        return ImagePart;
    }

    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 s = "";
        if(getterRealPart()==0&&getterImagePart()==0){
            s="0";
        }
        else if(getterRealPart()!=0&&getterImagePart()==0){
            s=s+getterRealPart();
        }
        else if (getterRealPart()==0&&getterImagePart()!=0){
            s=s+getterImagePart()+"i";
        }
        else
        {
            if(getterImagePart()<0){
                s = s+getterRealPart()+getterImagePart()+"i";
            }
            else {
                s = s+getterRealPart()+"+"+getterImagePart()+"i";
            }

        }
        return s;
    }

    Complex ComplexAdd(Complex a){
        return new Complex(RealPart + a.RealPart,ImagePart + a.ImagePart);
    }
    Complex ComplexSub(Complex a){
        return new Complex(RealPart - a.RealPart,ImagePart - a.ImagePart);
    }
    Complex ComplexMulti(Complex a){
        return new Complex(RealPart*a.RealPart-ImagePart*a.ImagePart,RealPart*a.ImagePart + ImagePart*a.RealPart);
    }
    Complex ComplexDiv(Complex a) {
        return new Complex((RealPart * a.ImagePart + ImagePart * a.RealPart) / (a.ImagePart * a.ImagePart + a.RealPart * a.RealPart), (ImagePart * a.ImagePart + RealPart * a.RealPart) / (a.RealPart * a.RealPart + a.RealPart * a.RealPart));
    }
}

测试代码

import junit.framework.TestCase;
import org.junit.Test;

public class ComplexTest extends TestCase {
    Complex b = new Complex(3,7);
    Complex c = new Complex(2,-5);
    @Test
    public void testComplexAdd(){
        assertEquals("5.0+2.0i",b.ComplexAdd(c)+"");
    }
    @Test
    public void testComplexMulti(){
        assertEquals("41.0-1.0i",b.ComplexMulti(c)+"");
    }
    @Test
    public void testComplexDiv(){
        assertEquals("-0.034482758620689655-3.625i",b.ComplexDiv(c)+"");
    }
    @Test
    public void testComplexSub(){
        assertEquals("1.0+12.0i",b.ComplexSub(c)+"");
    }

}

这个Div是因为选数不慎,但是已经修改了

全部过关

五:

实验要求:

使用[WhiteStarUML](http://whitestaruml.sourceforge.net/)对实验二中的代码进行建模,发类图的截图,加上学号水印。
参考http://www.cnblogs.com/rocedu/p/6736847.html

类图中只少两个类。

实验步骤:

 

实验过程中遇到的问题及其解决

1:无论如何junit没有效果总是红字显示我没有junit

后来发现是因为我在一个文件夹里面总是考了两个相同的类(一个用来@TEST)

解决方法:删除一个

2:做TDD例子的时候总是会便用找不到类??

后来发现是类名写错了,,卡了我好久想想觉得好笑

原文地址:https://www.cnblogs.com/lijinran/p/10723647.html