• 201820192 20175306实验二面向对象程序设计《Java开发环境的熟悉》实验报告


    2018-2019-2 20175306实验二面向对象程序设计《Java开发环境的熟悉》实验报告


    面向对象程序设计-1

    实验要求:

    实验步骤:

    • 点击New->Directory新建一个test目录,再右键点击设置环境变量,选择Mark Directory->Test Sources Root即可

    • 正常情况:

    • 错误情况:

    • 边界情况:

    • 最终测试结果:

    面向对象程序设计-2

    实验要求:

    实验步骤:

    • 已安装JUnitGenerator V2.0

    • StringBuffer代码运行结果

    • 测试结果

    面向对象程序设计-3

    实验要求:

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

    实验步骤:

    • OCP原则是OOD中最重要的一个原则,OCP原则的内容是:

    软件实体(类,模块,函数等)应该对扩充开放,对修改封闭。

    对扩充开放(Open For Extension )要求软件模块的行为必须是可以扩充的,在应用需求改变或需要满足新的应用需求时,我们要让模块以不同的方式工作;

    对修改封闭(Closed for Modification )要求模块的源代码是不可改动的,任何人都不许修改已有模块的源代码。

    基于OCP,利用面向对象中的多态性(Polymorphic),更灵活地处理变更拥抱变化,OCP可以用以下手段实现:(1)抽象和继承,(2)面向接口编程。

    • DIP原则的内容是:

    高层模块不应该依赖于低层模块。二者都应该依赖于抽象;

    抽象不应该依赖于细节。细节应该依赖于抽象;

    通过接口或者抽象类,DIP在应用中通过依赖注入的方式实现解耦,重用低级模块,重用实现,解除依赖。

    • 我的是让系统支持Byte类,我不是特别明白怎么进行设计,我是根据支持Float类以及其UML类图进行仿照编写的。
      测试代码:
    // Server Classes
    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=1;
        }
        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 pd;
        Document(Factory pf){
            pd = pf.CreateDataObject();
        }
        public void DisplayData(){
            pd.DisplayValue();
        }
    }
    //Test class
    public class MyDoc {
        static Document d;
        public static void main(String[] args) {
            d = new Document(new ByteFactory());
            d.DisplayData();
        }
    }
    

    运行结果为:

    面向对象程序设计-4

    实验要求:以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)

    实验步骤:

    • 产品代码
    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 a) {
            return new Complex(r + a.r, i + a.i);
        }
        public Complex ComplexSub(Complex a) {
            return new Complex(r - a.r, i - a.i);
        }
        public Complex ComplexMulti(Complex a) {
            return new Complex(r * a.r - i * a.i, r * a.i + i * a.r);
        }
        public Complex ComplexDiv(Complex a) {
            return new Complex((r * a.i + i * a.r)/(a.i * a.i + a.r * a.r), (i * a.i + r * a.r)/(a.i * a.i + a.r * a.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;
        }
    }
    
    • 测试代码:
    import junit.framework.TestCase;
    import org.junit.Test;
    public class ComplexTest extends TestCase {
        Complex c1 = new Complex(1, 2);
        Complex c2 = new Complex(2, 2);
        Complex c3 = new Complex(2,0);
        @Test
        public void testgetRealPart() throws Exception {
            assertEquals(-1.1, Complex.getRealPart(-1.1));
            assertEquals(6.0, Complex.getRealPart(6.0));
            assertEquals(0.0, Complex.getRealPart(0.0));
        }
        @Test
        public void testgetImagePart() throws Exception {
            assertEquals(-1.1, Complex.getImagePart(-1.1));
            assertEquals(6.0, Complex.getImagePart(6.0));
            assertEquals(0.0, Complex.getImagePart(0.0));
        }
        @Test
        public void testComplexAdd() throws Exception {
            assertEquals("3.0+4.0i", c1.ComplexAdd(c2).toString());
            assertEquals("3.0+2.0i", c1.ComplexAdd(c3).toString());
            assertEquals("4.0+2.0i", c2.ComplexAdd(c3).toString());
        }
        @Test
        public void testComplexSub() throws Exception {
            assertEquals("-1.0", c1.ComplexSub(c2).toString());
            assertEquals("-1.0+2.0i", c1.ComplexSub(c3).toString());
            assertEquals("0.0+2.0i", c2.ComplexSub(c3).toString());
        }
        @Test
        public void testComplexMulti() throws Exception {
            assertEquals("-2.0+6.0i", c1.ComplexMulti(c2).toString());
            assertEquals("2.0+4.0i", c1.ComplexMulti(c3).toString());
            assertEquals("4.0+4.0i", c2.ComplexMulti(c3).toString());
        }
        @Test
        public void testComplexComplexDiv() throws Exception {
            assertEquals("0.75+0.75i", c1.ComplexDiv(c2).toString());
            assertEquals("1.0+0.5i", c1.ComplexDiv(c3).toString());
            assertEquals("1.0+1.0i", c2.ComplexDiv(c3).toString());
        }
    }
    
    • 运行结果截图:

    面向对象程序设计-5

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

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

    类图中至少两个类。

    实验步骤:

    实验中遇到的问题:

    • 问题一:在单元测试中,@Test是红色的。
    • 解决过程:这是因为没有导入相应的包,根据老师的教程,然后我又查阅了一些资料,找到了解决方案。要按照相同的方法,导入两个Junit的包。

    代码托管:

    码云链接:>https://gitee.com/wjs123456/wjs20175306/tree/master/实验二

    总结:

    本次实验主要是针对测试,在之前的结对项目中也应用到了测试,所以提前学习了一下,再做实验的时候就感觉比较轻松,遇到的困难也比较少。测试对一个程序来说是至关重要的,可以发现很多问题,合理的运用测试,能够让你的程序更加完美。在制作UML图的时候,我首先运用了老师推荐的软件,但我还是比较习惯使用ProcessOn,因为这是一个网页软件,在网页就可以直接进行编辑,不用下载,非常方便。但是WhiteStarUML毕竟是一款专门制作UML类图的软件,更加专业,总之两者皆有长处,可根据自己的喜好选择适合自己的。

  • 相关阅读:
    使用 Helm【转】
    部署 Helm【转】
    Helm 架构【转】
    Why Helm?【转】
    用 ConfigMap 管理配置【转】
    js argument实参集合与局部变量、参数关系
    js 定时器
    JVM的调优
    Java异常,以及finally不会执行的情况
    Java绑定
  • 原文地址:https://www.cnblogs.com/wjs123456/p/10700936.html
Copyright © 2020-2023  润新知