博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
20165218 实验二 Java面向对象程序设计
阅读量:5137 次
发布时间:2019-06-13

本文共 7957 字,大约阅读时间需要 26 分钟。

实验二 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,并将其改成可作为源代码编译
    1296490-20180422181056813-1713013981.png

1296490-20180422181104000-1481914539.png

  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. 运行成功

    1296490-20180422181113960-130579302.png

  2. 出现语法错误时

    File->Project Structure
    1296490-20180422181124483-529171381.png

1296490-20180422181130940-444785856.png

在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. 如果显示测试失败(如下图),根据提示修改测试代码1296490-20180422181148592-215507091.png
  2. 测试成功1296490-20180422181204438-1067260675.png

(三)设计模式初步

  • 实验内容

    参考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 Classesabstract 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 classesclass 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();    }}
  1. 1296490-20180422181218099-1103239690.png

(四)练习

  • 实验内容

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

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

任务:以TDD的方式开发一个复数类Complex,要求如下:

//伪代码// 定义属性并生成getter,setterdouble RealPart;double ImagePart;// 定义构造函数public Complex()public Complex(double R,double I)//Override Objectpublic 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. 测试结果
    1296490-20180422181237323-406743013.png

(五)UML图绘制

  • 实验内容

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

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

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

回车确认1296490-20180422181254321-47848349.png

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

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

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

  4. 完成1296490-20180422181325911-1494055784.png



PSP时间图

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

分析单元测试的好处

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

参考资料

转载于:https://www.cnblogs.com/zicerain/p/8908587.html

你可能感兴趣的文章
解决linux服务器乱码
查看>>
mapbox.gl文字标注算法基本介绍
查看>>
【C++】异常简述(二):C++的异常处理机制
查看>>
web.config在哪里
查看>>
SQL Server 2000 版本支持的最大物理内存量
查看>>
spring IOC装配Bean(注解方式)
查看>>
FTP服务器的搭建和使用(centos7)
查看>>
[面试算法题]有序列表删除节点-leetcode学习之旅(4)
查看>>
SpringBoot系列五:SpringBoot错误处理(数据验证、处理错误页、全局异常)
查看>>
MyEclipse搭建SSM框架(Spring+MyBatis+SpringMVC)
查看>>
kubernetes_book
查看>>
Linux下串口通信工具minicom的用法
查看>>
使用SWIG轻松编写Python扩展
查看>>
Redis 常用数据结构命令
查看>>
【oracle】oracle的ed命令
查看>>
软件工程课堂作业
查看>>
OpenFire 的安装和配置
查看>>
web.config详解
查看>>
ZJOI2018游记Round1
查看>>
侧边栏广告和回到顶部
查看>>