实验二 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类还有检查用的类,下图是最初的类(改了名,问题不大)

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

实验二 Java面向对象程序设计 20175301李锦然实验报告 随笔 第1张

 

然后导入最初的程序

实验二 Java面向对象程序设计 20175301李锦然实验报告 随笔 第2张

 

然后看看检验程序结果

实验二 Java面向对象程序设计 20175301李锦然实验报告 随笔 第3张

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

实验二 Java面向对象程序设计 20175301李锦然实验报告 随笔 第4张

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

然后来检测边界情况

实验二 Java面向对象程序设计 20175301李锦然实验报告 随笔 第5张

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

修改程序然后再检测通过

最终程序:

实验二 Java面向对象程序设计 20175301李锦然实验报告 随笔 第6张

实验二 Java面向对象程序设计 20175301李锦然实验报告 随笔 第7张

 补一个用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));
    }


}

代码全部通过!

实验二 Java面向对象程序设计 20175301李锦然实验报告 随笔 第8张

面向对象程序设计-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中配置就可以了

实验二 Java面向对象程序设计 20175301李锦然实验报告 随笔 第9张

 

还有TDD方法第一个例子

实验二 Java面向对象程序设计 20175301李锦然实验报告 随笔 第10张

然后就开始用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 测试结果

实验二 Java面向对象程序设计 20175301李锦然实验报告 随笔 第11张

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();
    }   
}

实验二 Java面向对象程序设计 20175301李锦然实验报告 随笔 第12张

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是因为选数不慎,但是已经修改了

实验二 Java面向对象程序设计 20175301李锦然实验报告 随笔 第13张

全部过关

五:

实验要求:

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

类图中只少两个类。

实验步骤:

 实验二 Java面向对象程序设计 20175301李锦然实验报告 随笔 第14张

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

解决方法:删除一个

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

实验二 Java面向对象程序设计 20175301李锦然实验报告 随笔 第15张

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

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄