zoukankan      html  css  js  c++  java
  • 20165334实验二 面向对象程序设计

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

    实验内容

    一、实现百分制成绩转成“优、良、中、及格、不及格”五级制成绩的功能
    1、产品代码
    public class MyUtil{
        public static String percentage2fivegrade(int grade){
            //如果成绩小于0,转成“错误”
            if ((grade < 0))
                return "错误";
                //如果成绩小于60,转成“不及格”
            else if (grade < 60)
                return "不及格";
                //如果成绩在60与70之间,转成“及格”
            else if (grade < 70)
                return "及格";
                //如果成绩在70与80之间,转成“中等”
            else if (grade < 80)
                return "中等";
                //如果成绩在80与90之间,转成“良好”
            else if (grade < 90)
                return "良好";
                //如果成绩在90与100之间,转成“优秀”
            else if (grade < 101)
                return "优秀";
                //如果成绩大于100,转成“错误”
            else
                return "错误";
        }
    }
    
    测试代码
    import junit.framework.TestCase;
    import org.junit.Test;
    
    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));
        }
        @Test
        public void testExceptions() {
            assertEquals("错误", MyUtil.percentage2fivegrade(-50));
            assertEquals("错误", MyUtil.percentage2fivegrade(110));
        }
        @Test
        public void testBoundary() {
            assertEquals("不及格", MyUtil.percentage2fivegrade(0));
            assertEquals("及格", MyUtil.percentage2fivegrade(60));
            assertEquals("中等", MyUtil.percentage2fivegrade(70));
            assertEquals("良好", MyUtil.percentage2fivegrade(80));
            assertEquals("优秀", MyUtil.percentage2fivegrade(90));
            assertEquals("优秀", MyUtil.percentage2fivegrade(100));
        }
    
    }
    

    二、以TDD的方式研究学习StringBuffer

    1、产品代码
    public class StringBufferDemo {
      public static void main(String [] args){
                     StringBuffer buffer = new StringBuffer(20);
                     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());
                  }
    
    }
    

    测试代码

    import junit.framework.TestCase;
    import org.junit.Test;
    public class StringBufferDemoTest extends TestCase {
        StringBuffer a=new StringBuffer("StringBuffer");
        StringBuffer b=new StringBuffer("StringBufferStringBuffer");
        StringBuffer c=new StringBuffer("StringBufferStringBufferStringBuffer");
        @Test
        public void testcharAt() throws Exception{
            assertEquals('S',a.charAt(0));
            assertEquals('g',a.charAt(5));
            assertEquals('r',a.charAt(11));
        }
        @Test
        public void testcapacity() throws Exception{
            assertEquals(28,a.capacity());
            assertEquals(40,b.capacity());
            assertEquals(52,c.capacity());
        }
        @Test
        public void testlength() throws Exception {
            assertEquals(12,a.length());
            assertEquals(24,b.length());
            assertEquals(36,c.length());
        }
        @Test
        public void testindexOf() throws Exception {
            assertEquals(0,a.indexOf("Str"));
            assertEquals(5,a.indexOf("gBu"));
        }
    
    
    }
    

    三、对MyDoc类进行扩充,让其支持Long类,初步理解设计模式

    面向对象三要素是“封装、继承、多态”,任何面向对象编程语言都会在语法上支持这三要素。如何借助抽象思维用好三要素特别是多态还是非常困难的,S.O.L.I.D类设计原则是一个很好的指导:

    • SRP(Single Responsibility Principle,单一职责原则)
    • OCP(Open-Closed Principle,开放-封闭原则)
    • LSP(Liskov Substitusion Principle,Liskov替换原则)
    • ISP(Interface Segregation Principle,接口分离原则)
    • DIP(Dependency Inversion Principle,依赖倒置原则)

    20165335%6=0所以我做的题目是

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

    1、代码如下

    abstract class Data{
        public abstract void DisplayValue();
    }
    class Integer extends Data {
        int value;
        Integer(){
            value=100; }
        public void DisplayValue(){
            System.out.println(value);
        }
    }
    class PaseByte extends Data {
        byte value;
        PaseByte(){
            value=-13;
        }
        public void DisplayValue(){
            System.out.println(value);
        }
    }
    class Document {
        Data pd;
        Document() {
            pd=new PaseByte() ;
        }
        public void DisplayData(){
            pd.DisplayValue();
        }
    }
    public class MyDoc {
        static Document d;
        public static void main(String[] args) {
            d = new Document();
            d.DisplayData();
        }
    }
    

    四、以TDD的方式开发一个复数类Complex

    由于这个程序比较大,所以需要伪代码整理思路
    //伪代码如下
    (1)属性:复数包含实部和虚部两个部分,
    double RealPart;复数的实部
    double ImagePart;复数的虚部
    getRealPart():返回复数的实部
    getImagePart();返回复数的虚部
    setRealPart():设置复数的实部
    setImagePart();设置复数的虚部
    输出形式:a+bi
    (2)方法:
    ①定义构造函数
    public Complex()
    public Complex(double R,double I)
    ②定义公有方法:加减乘除
    Complex ComplexAdd(Complex a):实现复数加法
    Complex ComplexSub(Complex a):实现复数减法
    Complex ComplexMulti(Complex a):实现复数乘法
    Complex ComplexDiv(Complex a):实现复数除法
    ③Override Object
    public String toString():将计算结果转化为字符串形式并输出
    

    1、产品代码

    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;
         }
     }
    

    2、测试代码

    import junit.framework.TestCase;
    import org.junit.Test;
    public class ComplexTest extends TestCase {
       Complex a=new Complex(1,2);
       Complex b=new Complex(1,-4);
       Complex c=new Complex(0,0);
       Complex d=new Complex(5,0);
       Complex e=new Complex(0,8);
       @Test
       public void testgetRealPart() throws Exception{
           assertEquals(1.0,Complex.getRealPart(1.0));
           assertEquals(-1.0,Complex.getRealPart(-1.0));
           assertEquals(55.0,Complex.getRealPart(55.0));
           assertEquals(0.0,Complex.getRealPart(0.0));
       }
       @Test
       public void testgetImagePart() throws Exception{
           assertEquals(1.0,Complex.getImagePart(1.0));
           assertEquals(-1.0,Complex.getImagePart(-1.0));
           assertEquals(0.0,Complex.getImagePart(0.0));
           assertEquals(65.0,Complex.getImagePart(65.0));
       }
       @Test
       public void testComplexAdd() throws   Exception{
           assertEquals("2.0 -2.0i",a.ComplexAdd(b).toString());
           assertEquals("1.0 -4.0i",b.ComplexAdd(c).toString());
          assertEquals("5.0",c.ComplexAdd(d).toString());
           assertEquals("5.0+8.0i",d.ComplexAdd(e).toString());
       }
       @Test
       public void testComplexSub() throws   Exception{
           assertEquals("0.0+6.0i",a.ComplexSub(b).toString());
           assertEquals("0.0 -8.0i",c.ComplexSub(e).toString());
       }
       @Test
       public void testComplexMulti() throws   Exception{
           assertEquals("9.0 -2.0i",a.ComplexMulti(b).toString());
           assertEquals("0.0",c.ComplexMulti(d).toString());
       }
       @Test
       public void testComplexDiv() throws   Exception{
           assertEquals("-0.4 -1.4i",b.ComplexDiv(a).toString());
       }
    
    }
    

    实验截图

    实验1截图

    实验2截图

    实验3截图

    实验4截图

    实验中遇到的问题

    • 问题1:在配置好Junit后@Test任然是是红色
    • 解决办法:点解@Test旁的灯泡修正后即可。
    • 问题2:在做第4个小实验时遇到如图问题

    解决办法:根据错误提示已经修改,但想让它能兼容多空格或少空格,不知道如何修改

    实验总结

    本次实验最大的收获是体会到用junit测试代码的灵活性,以及在实验MyDoc类扩展中体会到抽象编程、抽象和继承、面向接口编程的理解。

    步骤 耗时 百分比
    需求分析 15min 20%
    设计 32min 32%
    代码实现 20min 25%
    测试 15min 19%
    分析总结 10min 4%
  • 相关阅读:
    iOS企业证书开发的APP证书过期时间监控
    事件冒泡,事件捕获
    倒计时
    获取多个div,点击第几个,显示第几个
    js继承
    javascript基础知识总结
    大型web系统高效应用方法(转载)
    数据库(内联,外联,交叉联)
    .net零碎基础知识点不完全小结
    C#的内存管理:堆、栈、托管堆与指针(转)
  • 原文地址:https://www.cnblogs.com/ltl123/p/8847918.html
Copyright © 2011-2022 走看看