• 20145319 实验二


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

    程序设计过程

    实验内容

    • 初步掌握单元测试和TDD

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

    • 初步掌握UML建模

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

    • 使用TDD设计实现复数类

    编写代码

    • 思路: 创建一个complex类,将赋值、加、减、乘、除一一封装,再编写complex test检验即可

    • 伪代码:

        设计SetApart为complex取得实数部的值
        设计SetBpart为complex取得虚数部的值
        设计toString()输出字符串
        设计函数complex add()完成加法操作并return complex q
        设计函数complex minus()完成减法return complex q
        设计函数complex multiply()完成乘法并return
      
    • 产品代码:

        public class complex {
        	private int a;
        	private int b;
      
        	public void SetApart(int a){
        		this.a=a;
        	}
      
        	public void SetBpart(int b){
        		this.b=b;
        	}
      
        	public String toString(){
        		if(b<0){
        				return a+""+b+"i";//a和b中要加入一个字符,不然输出时侯就会先输出a+b的值
        		}//问题儿童二代码中虽然输出结果看上去正确但是不利于检验
        		return a+"+"+b+"i";
        
        	}
      
        	public complex add(complex y){
        		complex q=new complex();
        		q.a=y.a+a;
        		q.b=y.b+b;
        		return q;
        	}
        
        	public complex minus(complex y){
        		complex q=new complex();
        		q.a=a-y.a;
        		q.b=b-y.b;
        		return q;
        	}
        
        	public complex multiply(complex y){
        		complex q=new complex();
        		q.a=-y.b*b+y.a*a;//虚数部之积要取反录入
        		q.b=y.a*b+y.b*a;
        		return q;
        	}
      
        	public complex devide(complex y){
        		complex q=new complex();
        		q.a/=a;
        		q.b/=b;
        		return q;
        	}
        }
      
    • 调试代码:

        import org.junit.Test;
      
        import junit.framework.TestCase;
      
      
         class complexTest extends TestCase {
      
        	@Test
        	public void test() {//b为负数时,输出以及运算
        		complex x=new complex();
        		complex y=new complex();
        		complex z=new complex();
        		complex a=new complex();
        		x.SetApart(5);
        		x.SetBpart(6);
        		y.SetApart(2);
        		y.SetBpart(-3);
        		z=x.add(y);
        		a=x.multiply(y);
        		assertEquals("2-3i",y.toString());
        		assertEquals("7+3i", z.toString());
        		assertEquals("28-3i", a.toString());
        	}
      
        	@Test
        	public void test2(){//a为0时,输出以及运算
        		complex ab=new complex();
        		complex cd=new complex();
        		complex ef=new complex();
        		complex gd=new complex();
        		ab.SetApart(0);
        		ab.SetBpart(5);
        		cd.SetApart(1);
        		cd.SetBpart(4);
        		ef=ab.minus(cd);
        		gd=ab.multiply(cd);
        		assertEquals("0+5i", ab.toString());
        		assertEquals("1+4i", cd.toString());
        		assertEquals("-1+1i", ef.toString());
        		assertEquals("-20+5i", gd.toString());
        	}	
        
        	@Test
        	public void test3(){//b为0时,输出以及运算
        		complex ab=new complex();
        		complex cd=new complex();
        		complex ef=new complex();
        		complex gt=new complex();
        		complex hi=new complex();
        		ab.SetApart(7);
        		ab.SetBpart(0);
        		cd.SetApart(5);
        		cd.SetBpart(9);
        		ef=ab.add(cd);
        		gt=ab.minus(cd);
        		hi=ab.multiply(cd);
        		assertEquals("7+0i", ab.toString());
        		assertEquals("5+9i", cd.toString());
        		assertEquals("12+9i", ef.toString());
        		assertEquals("2-9i", gt.toString());
        		assertEquals("35+63i", hi.toString());
        		}
      
        	@Test
        	public void test4(){//a为0,输出以及运算
        		complex ab=new complex();
        		complex cd=new complex();
        		complex ef=new complex();
        		complex gt=new complex();
        		complex hi=new complex();
        		ab.SetApart(0);
        		ab.SetBpart(3);
        		cd.SetApart(0);
        		cd.SetBpart(7);
        		ef=ab.add(cd);
        		gt=ab.minus(cd);
        		hi=ab.multiply(cd);
        		assertEquals("0+3i", ab.toString());
        		assertEquals("0+7i", cd.toString());
        		assertEquals("0+10i", ef.toString());
        		assertEquals("0-4i", gt.toString());
        		assertEquals("-21+0i", hi.toString());
        	}
        
        	@Test
        	public void test5(){//a、b均为负数……
        		complex ab=new complex();
        		complex cd=new complex();
        		complex ef=new complex();
        		complex gt=new complex();
        		complex hi=new complex();
        		ab.SetApart(-3);
        		ab.SetBpart(-7);
        		cd.SetApart(6);
        		cd.SetBpart(-4);
        		ef=ab.add(cd);
        		gt=ab.minus(cd);
        		hi=ab.multiply(cd);
        		assertEquals("-3-7i", ab.toString());
        		assertEquals("6-4i", cd.toString());
        		assertEquals("3-11i", ef.toString());
        		assertEquals("-9-3i", gt.toString());
        		assertEquals("-46-30i", hi.toString());
        		}
        	}
      

    单元测试总结

    • 在本次试验中,我们第一次接触到了一种测试代码的方法,单元测试,相比我们自己编写complextest代码,使用一堆if ……else if语句来说,单元测试无疑简单了许多,也不用担心自己再写test程序时if……else语句出现逻辑上的问题,只需要使用assertEquals("理想结果",调用函数);而且可以测试多组数据,只需要复制第一个Test块,然后修改赋值语句即可,而且代码本身看上去也更加简洁,比较方便检查

    UML使用

    PSP时间统计

    耗时(min) 百分比
    需求分析 10 min 4
    设计 10 min 4
    代码设计 40 min 16
    测试 120min 52
    分析总结 60min 24
  • 相关阅读:
    bzoj 2002 [Hnoi2010]Bounce 弹飞绵羊
    【无图慎入】Link Cut Tree 总结
    cogs1889 [SDOI2008]Cave 洞穴勘测 link-cut tree
    Codeforces Round #452 (Div. 2)
    【正经向】NOIP2017烤后总结
    cogs1772 [国家集训队2010]小Z的袜子
    noip2017普及题解
    noip2017 TG 游记
    noip2017 PJ AK记
    jzoj5341 捕老鼠
  • 原文地址:https://www.cnblogs.com/20145319zk/p/5389265.html
Copyright © 2020-2023  润新知