zoukankan      html  css  js  c++  java
  • #20175201 实验二:Java面向对象程序设计

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

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

    1. 初步掌握单元测试和TDD
    2. 理解并掌握面向对象三要素:封装、继承、多态
    3. 初步掌握UML建模
    4. 熟悉S.O.L.I.D原则
    5. 了解设计模式
      实验步骤
      (一)单元测试
      (1) 三种代码: 伪代码、产品代码、测试代码。
      伪代码与具体编程语言无关,伪代码从意图层面来解决问题,最终,伪代码是产品代码最自然的、最好的注释。
      产品代码
      图片.png
      增加对负数下测试:
      图片.png
      我们对输入为“0,60,70,80,90,100”这些边界情况进行测试:
      图片.png
      我们发现边界情况中输入100时有一个Bug。我们修改MyUtil.java,把判断优秀的条件中包含输入为100的情况
      修改bug后测试:
      图片.png

    TDD

    先写测试代码,然后再写产品代码的开发方法叫“测试驱动开发”(TDD)。
    TDD的一般步骤如下:
    1、明确当前要完成的功能,记录成一个测试列表
    2、快速完成编写针对此功能的测试用例
    3、测试代码编译不通过(没产品代码呢)
    4、编写产品代码
    5、测试通过
    6、对代码进行重构,并保证测试通过(重构下次实验练习)
    7、循环完成所有功能的开发
    TDD的编码节奏是:
    1、增加测试代码,JUnit出现红条
    2、修改产品代码
    3、JUnit出现绿条,任务完成
    (由于提前阅读了老师的学习指导,直接选择了绿条正确做法。)
    做法如截图
    图片.png

    图片.png

    图片.png

    图片.png

    实验2-3
    步骤:来自http://www.cnblogs.com/rocedu/p/6736847.html
    用自己的学号%6进行取余运算,根据结果进行代码扩充:
    0:让系统支持Byte类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
    1:让系统支持Short类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
    2:让系统支持Boolean类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
    3:让系统支持Long类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
    4:让系统支持Float类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
    5:让系统支持Double类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
    这是两个很好的提交,增加的代码和测试结果一目了然:
    // 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();
    }
    }
    测试结果如下:
    图片.png

    实验2-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());
    }
    }
    测试结果:
    图片.png

    实验2-5:对实验2代码进行建模结果如下:
    图片.png

  • 相关阅读:
    windows相关命令记录
    使用addviewController()实现无业务逻辑跳转
    eclipse实用快捷键
    spring注解的相关配置
    day15-python-函数参数、名称空间、作用域
    day14-python-函数参数
    day13-seek、文件修改、函数及其参数
    day12-python-文件读取模式,文件指针移动
    day11-python-文件基础操作
    Ubuntu 更新软件的命令
  • 原文地址:https://www.cnblogs.com/20175201zc/p/10711777.html
Copyright © 2011-2022 走看看