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


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

    一、面向对象程序设计1——单元测试和TDD

    1.实验要求

    测试要点:本提交点考查JUnit会不会使用,测试用例至少要包含正常情况,错误情况,边界情况的测试

    2.运行结果截图

    3.代码链接:
    MyUtil.java
    MyUtilTest.java

    二、面向对象程序设计2——利用TDD学习研究学习StringBuffer

    1.实验要求

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

    2.实验结果截图

    3.代码链接:
    MyDoc.java

    三、面向对象程序设计-3

    1.实验要求:
    实验二 Java面向对象程序设计(http://www.cnblogs.com/rocedu/p/4472842.html)

    • 参考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类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印

    2.实验结果截图

    3.代码链接:
    Complex.java
    ComplexTest.java

    四、面向对象程序设计-4

    1.实验要求:

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

    • 参考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)  
    

    2.实验过程:
    (1)伪代码:

     属性:  
     定义实部;  
     定义虚部;  
     设置复数的实部;  
     设置复数的虚部;  
     返回复数的实部;  
     返回复数的虚部;  
     
     方法:  
     定义构造函数  
     定义公有方法(加减乘除)  
     将结果转化成字符串形式输出  
     
    

    (2)测试代码:

    import junit.framework.TestCase;
    import org.junit.Test;
    
    public class ComplexTest extends TestCase {
        Complex c1 = new Complex(2,1);
        Complex c2 = new Complex(0,3);
        Complex c3 = new Complex(-1,-1);
        @Test
        public void testgetRealPart() throws Exception {
            assertEquals(0.0,Complex.getRealPart(0.0));
            assertEquals(-2.0,Complex.getRealPart(-2.0));
            assertEquals(6.0,Complex.getRealPart(6.0));
        }
        @Test
        public void testComplexAdd() throws Exception{
            assertEquals("2.0+4.0i",c1.ComplexAdd(c2).toString());
            assertEquals("-1.0+2.0i",c2.ComplexAdd(c3).toString());
            assertEquals("1.0",c1.ComplexAdd(c3).toString());
        }
        @Test
        public void testComplexSub() throws Exception{
            assertEquals("2.0 -2.0i",c1.ComplexSub(c2).toString());
            assertEquals("1.0+4.0i",c2.ComplexSub(c3).toString());
            assertEquals("-3.0 -2.0i",c3.ComplexSub(c1).toString());
        }
        @Test
        public void testComplexMulti() throws Exception {
            assertEquals("-3.0+6.0i",c1.ComplexMulti(c2).toString());
            assertEquals("3.0 -3.0i",c2.ComplexMulti(c3).toString());
            assertEquals("-1.0 -3.0i",c3.ComplexMulti(c1).toString());
        }
        @Test
        public void testComplexDiv() throws Exception {
            assertEquals("0.6666666666666666+0.3333333333333333i",c1.ComplexDiv(c2).toString());
            assertEquals("-1.5 -1.5i",c2.ComplexDiv(c3).toString());
            assertEquals("-0.6 -0.6i",c3.ComplexDiv(c1).toString());
        }
    
    }  
    

    (3)测试代码运行成功截图:

    (4)产品代码:

    public class Complex {
        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;
        }
    
        public Complex ComplexAdd(Complex c) {
            return new Complex(r + c.r, i + c.i);
        }
        public Complex ComplexSub(Complex c) {
            return new Complex(r - c.r, i - c.i);
        }
        public Complex ComplexMulti(Complex c) {
            return new Complex(r * c.r - i * c.i, r * c.i + i * c.r);
        }
        public Complex ComplexDiv(Complex c) {
            return new Complex((r * c.i + i * c.r)/(c.i * c.i + c.r * c.r), (i * c.i + r * c.r)/(c.i * c.i + c.r * c.r));
        }
    
        public String toString() {
            String s = " ";
            if (i > 0)
                s =  r + "+" + i + "i";
            if (i == 0)
                s =  r + "";
            if (i < 0)
                s = r + " " + i + "i";
            return s;
        }
    }
    

    五、面向对象程序设计5

    1.实验要求:

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

    2.实验截图:

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

    Q1:在安装Junit时,按照老师给的教程,点击Install JetBrains plugin... 然而并没有发现JUnitGenerator V2.0.

    A1:经过我的学习伙伴的指点,并且自己在网上查找了一下,找到了原来学长写的一篇关于安装Junit的博客,原来,要点击如图所示的Browse repositories,就能搜到了,安装好就如图所示了。

    Q2:在使用Junit学习时,发现在安装好junit.jar,仍然无法使用。
    A2:在好友的指导下,在Everything中需要安装junit.jarjunit-4.12.jar,如图所示,在Everything中查找到两个包,并安装,安装好后如图所示。


    Q3:在编写实验2的测试码时,出现了如图所示错误。

    A3:经过错误提示,应该是下标越界问题,于是,我检查了代码中是否有错误的地方,结果发现了自己因马虎所犯下的错误,如图所示。所以,大家一定要引以为戒。

    Q4:本次实验,娄老师让我们自己练习画UML图,之前自己一直没有太重视这个知识点,于是我借这个机会总结了一下易混符号的区别。
    A4:
    1.实线箭头和虚线箭头:

    实线箭头代表的是关联关系。如果A类中的成员变量是用B类声明的对象,那么A和B的关系是关联关系,则是 B指向A。
    虚线箭头代表的是依赖关系。如果A类中某个方法的参数是B类声明的对象或某个方法返回的数据类型是B类对象,那么A和B是依赖关系,则为B指向A。

    2.实线空三角和虚线空三角:

    实线空三角是指继承关系,起始端是子类的UML图,终点端是父类的UML图。

    虚线空三角用于实现接口,UML通过使用虚线连接类和它所实现的接口,虚线的起始端是类,终点端是它所实现的接口。

    七、实验总结与体会

    本次实验内容较为丰富,首先我们学习了单元测试和TDD,学会利用这两种方式来编写程序,起初,老师给的博客中经常提到“测试码”一词,如今,自己也学会写测试码,对自己今后的编程很有好处。其次,自己对UML图的理解也更为深入,体会到了UML图与代码联系的紧密性,本次实验收获颇丰。

    步骤 耗时 百分比
    需求分析 12min 10%
    设计 10min 8%
    代码实现 48min 40%
    测试 40min 34%
    分析总结 10min 8%
  • 相关阅读:
    无监督聚类K-means算法
    Python程序执行顺序
    修改jupyter notebook响应的浏览器
    Vijos1035 贪婪的送礼者 [map的应用]
    POJ 2976 Dropping tests [二分]
    POJ 3111 K Best 最大化平均值 [二分]
    HDU 2899 Strange fuction [二分]
    HDU 2141 can you find it [二分]
    HDU 4004 The Frog's Games [二分]
    HDU 1969 Pie [二分]
  • 原文地址:https://www.cnblogs.com/20165203-xyx/p/8849398.html
Copyright © 2020-2023  润新知