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


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

    课程:java程序设计

    姓名:赵冰雨

    学号:20165218

    指导教师:娄嘉鹏

    实验日期:2018.4.16

    实验密级:Java开发环境的熟悉

    实验内容、步骤与体会:

    (一)单元测试

    • 实验要求

    参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST

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

    提交最后三个测试用例都通过的截图

    • 实验步骤
    1. 根据伪代码编写产品代码MyUtil.java
    2. 新建一个测试代码MyUtil.java
    3. 测试多种情况,包括正常情况,异常情况(负分或大于100的乘积),边界情况,并根据测试结果调整产品代码(以上是自己编写测试代码的过程)
    4. 新建测试文件夹test,并将其改成可作为源代码编译

    1. 在test文件夹下新建MyUtilTest.jva,输入代码:
    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));
        }
    }
    
    1. 运行成功

    2. 出现语法错误时
      File->Project Structure

    在IDEA安装地址下找到如下三个文件并添加即可


    (二)面向对象的三要素

    • 实验要求

    参考 积极主动敲代码,使用JUnit学习Java
    http://www.cnblogs.com/rocedu/p/4837092.html)

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

    以 TDD的方式研究学习StringBuffer,提交你的单元测试用例和测试通过的截图

    • 实验步骤
    1. 编写测试用例代码
    /**
     * Created by zby on 2018/4/16.
     */
    public class StringBufferDemo {
        public static void main(String[] args) {
            StringBuffer buffer = new StringBuffer();
            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());
        }
    }
    
    1. 测试代码
    import junit.framework.TestCase;
    import org.junit.Test;
    
    /**
     * Created by zby on 2018/4/16.
     */
    
    import junit.framework.TestCase;
    import org.junit.Test;
    
    import static org.junit.Assert.*;
    
    public class StringBufferTest extends TestCase {
        StringBuffer string1 = new StringBuffer("hellojava");//测试9个字符
        StringBuffer string2 = new StringBuffer("To be or not to be");//测试18个字符
        StringBuffer string3 = new StringBuffer("Quando abbandonare ogni speranza");//测试32个字符
    
        @Test
        public void testCharAt() {
            assertEquals('h', string1.charAt(0));
            assertEquals('e', string2.charAt(4));
            assertEquals('a', string3.charAt(7));
        }
    
        @Test
        public void testCapacity() {
            assertEquals(25, string1.capacity());
            assertEquals(34, string2.capacity());
            assertEquals(48, string3.capacity());
        }
    
        @Test
        public void testindexOf() {
            assertEquals(0, string1.indexOf("he"));
            assertEquals(9, string2.indexOf("not"));
            assertEquals(7, string3.indexOf("abbando"));
        }
    
        @Test
        public void testlength() {
            assertEquals(9, string1.length());
            assertEquals(18, string2.length());
            assertEquals(32, string3.length());
        }
    }
    
    1. 如果显示测试失败(如下图),根据提示修改测试代码
    2. 测试成功

    (三)设计模式初步

    • 实验内容

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

    对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理解设计模式

    用自己的学号%6进行取余运算,根据结果进行代码扩充:

    0: 让系统支持Byte类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印

    • 实验步骤
    1. 设计编写代码Data.javaMyDoc.java
    /**
     * Created by zby on 2018/4/16.
     */
    abstract class Data {
        abstract public void DisplayValue();
    }
    
    class Integer extends Data {
        int value;
    
        Integer() {
            value = 100;
        }
    
        public void DisplayValue() {
            System.out.println(value);
        }
    }
    
    class Byte extends Data {
        byte value;
    
        Byte() {
            value = (byte) 20165218;
        }
    
        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();
        }
    }
    
    //Client classes
    class Document {
        Data data;
    
        Document(Factory factory) {
            data = factory.CreateDataObject();
        }
    
        public void DisplayData() {
            data.DisplayValue();
    
        }
    }
    
    public class MyDoc {
        static Document d;
    
        public static void main(String[] args) {
            d = new Document(new ByteFactory());
            d.DisplayData();
        }
    }
    

    (四)练习

    • 实验内容

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

    参考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)
    
    • 实验步骤
    1. 产品代码
    /**
     * Created by zby on 2018/4/16.
     */
    public class Complex {
    
        // 定义属性并生成getter,setter
        private double RealPart;
        private double ImagePart;
    
        // 定义构造函数
        public Complex() {
    
        }
    
        public Complex(double R, double I) {
            this.RealPart = R;
            this.ImagePart = I;
        }
    
        public double getRealPart() {
            return RealPart;
        }
    
        public void setRealPart(double realPart) {
            RealPart = realPart;
        }
    
        public double getImagePart() {
            return ImagePart;
        }
    
        public void setImagePart(double imagePart) {
            ImagePart = imagePart;
        }
    
        //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) {
            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, ImagePart * a.RealPart + RealPart * a.ImagePart);
        }
    
        Complex ComplexDiv(Complex a) {
            Complex d = new Complex();
            d.RealPart = (this.RealPart * a.RealPart + this.ImagePart * a.ImagePart) / (a.RealPart * a.RealPart + a.ImagePart * a.ImagePart);
            d.ImagePart = (this.ImagePart * a.RealPart - this.RealPart * a.ImagePart) / (a.RealPart * a.RealPart + a.ImagePart * a.ImagePart);
            return d;
    
        }
    }
    
    
    1. 测试代码
    /**
     * Created by zby on 2018/4/16.
     */
    
    import org.junit.*;
    
    import static org.junit.Assert.*;
    
    public class ComplexTest {
        Complex a = new Complex(1, 2);
        Complex b = new Complex(1, -4);
    
        @Test
        public void testAdd() {
            assertEquals("2.0 -2.0i", a.ComplexAdd(b).toString());
            System.out.println(a.ComplexAdd(b));
        }
    
        @Test
        public void testSub() {
            assertEquals("0.0+6.0i", a.ComplexSub(b).toString());
            System.out.println(a.ComplexSub(b));
        }
    
        @Test
        public void testMulti() {
            assertEquals("9.0 -2.0i", a.ComplexMulti(b).toString());
            System.out.println(a.ComplexMulti(b));
        }
    
        @Test
        public void testDiv() {
            assertEquals("-0.4117647058823529+0.35294117647058826i", a.ComplexDiv(b).toString());
            System.out.println(a.ComplexDiv(b));
        }
    }
    
    1. 测试结果

    (五)UML图绘制

    • 实验内容

    使用WhiteStarUML对实验二中的代码进行建模,发类图的截图,加上学号水印。

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

    • 实验步骤
    1. 打开StarUML后,File->New新建一个文件
    2. 单击Class拖动到画布上,修改类的名称

    回车确认

    1. 右键单击类,添加对象和方法(如图所示)

    2. 双击对象或方法的名字可修改,单击小加号可以添加一个新的对象或方法

    3. 点击对象或方法,Properties->Visibility,修改访问权限

    4. 完成


    代码实现


    PSP时间图

    步骤 耗时 百分比
    需求分析 20min 6%
    设计 30min 9%
    代码实现 90min 27.3%
    测试 120min 36.4%
    分析总结 70min 21%

    分析单元测试的好处

    1. 帮助开发人员编写代码,提升质量、减少bug。
    2. 提升反馈速度,减少重复工作,提高开发效率。
    3. 保证你最后的代码修改不会破坏之前代码的功能。
    4. 让代码维护更容易。
    5. 有助于改进代码质量和设计。

    参考资料

    1. 实验二《Java面向对象程序设计》的一点说明
    2. 为什么要编写单元测试?单元测试的优势及优点
    3. 实验二 Java面向对象程序设计
    4. Intellj IDEA 简易教程
  • 相关阅读:
    Pycharm 设置python文件自动生成头部信息模板
    Python3.0 调用HTMLTestRunner生成的报告中不能显示用例中print函数的输出
    Python3.0 操作MySQL数据库执行SQL语句
    js时间戳转为日期格式
    Vue脚手架(vue-cli)安装总结
    Vue的生命周期
    常用的ES6语法
    学习python登录demo
    CSS的垂直居中和水平居中总结
    CSS清除浮动方法总结
  • 原文地址:https://www.cnblogs.com/zicerain/p/8908587.html
Copyright © 2020-2023  润新知