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

    实验二 面向对象程序设计

    面向对象程序设计-1

    参考

    单元测试

    三种代码
    • 伪代码
    • 产品代码
    • 测试代码

    需求:我们要在一个MyUtil类中解决一个百分制成绩转成“优、良、中、及格、不及格”五级制成绩的功能。

    伪代码:

    百分制转五分制:
       如果成绩小于60,转成“不及格”
       如果成绩在60与70之间,转成“及格”
       如果成绩在70与80之间,转成“中等”
       如果成绩在80与90之间,转成“良好”
       如果成绩在90与100之间,转成“优秀”
       其他,转成“错误”
    

    产品代码MyUtil.java

    public class MyUtil{
       public static String percentage2fivegrade(int grade){
           //如果成绩小于60,转成“不及格”
           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 < 100)
               return "优秀";
           //其他,转成“错误”
           else 
               return "错误";
       }
    }
    

    Java编程时,程序员对类实现的测试叫单元测试。类XXXX单元测试,我们一般写建一个XXXXTest的类,针对MyUtil类我们写一个MyUtilTest.java的测试模块,这里我们设计了一个测试用例(TestCase)测试用例是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。
    测试代码:

    正常情况:

    public class MyUtilTest {
        public static void main(String[] args) {
            //测试正常情况
            if(MyUtil.percentage2fivegrade(55) != "不及格")
                System.out.println("test failed!");
            else if(MyUtil.percentage2fivegrade(65) != "及格")
                System.out.println("test failed!");
            else if(MyUtil.percentage2fivegrade(75) != "中等")
                System.out.println("test failed!");
            else if(MyUtil.percentage2fivegrade(85) != "良好")
                System.out.println("test failed!");
            else if(MyUtil.percentage2fivegrade(95) != "优秀")
                System.out.println("test failed!");
            else 
                System.out.println("test passed!");
        }
    }
    

    边界情况:

    public class MyUtilTest {
        public static void main(String[] args) {
            //测试边界情况
            if(MyUtil.percentage2fivegrade(0) != "不及格")
                System.out.println("test failed 1!");
            else if(MyUtil.percentage2fivegrade(60) != "及格")
                System.out.println("test failed 2!");
            else if(MyUtil.percentage2fivegrade(70) != "中等")
                System.out.println("test failed 3!");
            else if(MyUtil.percentage2fivegrade(80) != "良好")
                System.out.println("test failed 4!");
            else if(MyUtil.percentage2fivegrade(90) != "优秀")
                System.out.println("test failed 5!");
            else if(MyUtil.percentage2fivegrade(100) != "优秀")
                System.out.println("test failed 6!");
            else 
                System.out.println("test passed!"); 
        }
    }
    

    错误情况:

    public class MyUtilTest {
        public static void main(String[] args) {
            //测试出错情况
            if(MyUtil.percentage2fivegrade(-10) != "错误")
                System.out.println("test failed 1!");
            else if(MyUtil.percentage2fivegrade(115) != "错误")
                System.out.println("test failed 2!");
            else 
                System.out.println("test passed!");
        }
    }
    

    提交最后三个测试用例都通过的截图,截图上要有画图加水印,输入自己的学号。

    产品代码:

    public class MyUtil{
        public static String percentage2fivegrade(int grade){
            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 <= 100)
                return "优秀";
                //其他,转成“错误”
            else
                return "错误";
        }
    }
    
    

    测试代码:

    截图:

    面向对象程序设计-2

    参考 积极主动敲代码,使用JUnit学习Java

    StringBuffer的例子,代码如下:

    1 public class StringBufferDemo{        
    2   public static void main(String [] args){    
    3       StringBuffer buffer = new StringBuffer(20);    
    4       buffer.append('S');     
    5       buffer.append("tringBuffer");     
    6       System.out.println(buffer.charAt(1));     
    7       System.out.println(buffer.capacity();     
    8       System.out.println(buffer.indexOf("tring12345"));    
    9       System.out.println("buffer = " + buffer.toString());
    10      System.out.println(buffer.length());
    11  }    
    12}    
    

    以 TDD的方式研究学习StringBuffer,提交你的单元测试用例和测试通过的截图,截图要加上学号水印。

    参考StringBuffer类型

    产品代码:

    public class StringBufferDemo {
        StringBuffer buffer = new StringBuffer();
        public StringBufferDemo(StringBuffer buffer){
            this.buffer = buffer;
        }
        public Character charAT(int i){
            return buffer.charAt(i);
        }
        public int capacity(){
            return buffer.capacity();
        }
        public int length(){
            return buffer.length();
        }
        public int indexOf(String buf){
            return buffer.indexOf(buf);
        }
    }
    
    

    测试代码:

    截图:

    面向对象程序设计-3

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

    // 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);
        } 
     } 
    // Pattern Classes 
    abstract class Factory { 
       abstract public Data CreateDataObject(); 
    }
    class IntFactory extends Factory { 
       public Data CreateDataObject(){
         return new Integer(); 
       } 
    } 
    //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 IntFactory()); 
                d.DisplayData(); 
        }   
    }
    

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

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

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

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

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

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

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

    截图:

    面向对象程序设计-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 {
        // 定义属性并生成getter,setter
        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;
        }
    
        //Override Object
        public boolean equals(Object obj) {
    
            Complex complex = (Complex) obj;
            if (complex.r != r) {
                return false;
            }
            if (complex.i != i) {
                return false;
            }
            return true;
        }
    
        public String toString() {
            String str = new String();
            if (i == 0) str = r + "";
            else if (i < 0) str = r + "" + i + "i";
            else str = r + "" + "+" + i + "i";
            return str;
        }
    
        // 定义公有方法:加减乘除
        Complex ComplexAdd(Complex a) {
            return new Complex(r + a.r, i + a.i);
        }
    
        Complex ComplexSubtract(Complex a) {
            return new Complex(r - a.r, i - a.i);
        }
    
        Complex ComplexMultiply(Complex a) {
            return new Complex(r * a.r - i * a.i, r * a.i + i * a.r);
        }
    
        Complex ComplexDivide(Complex a) {
            return new Complex((r * a.r + i * a.i) / (a.r * a.r + a.i * a.i), (i * a.r - r * a.i) / (a.r * a.r + a.i * a.i));
        }
    }
    
    

    测试代码:

    截图:

    面向对象程序设计-5

    public abstract class Animal {
        private String color;
        public String getColor() {
            return color;
        }
        public void setColor(String color) {
            this.color = color;
        }
        public abstract String shout(); 
    }
    public class Dog extends Animal{
        public String shout(){
            return "汪汪";
        }
           public String toString(){
            return "The Dog's color is " + this.getColor() +", and it shouts "+ this.shout() + "!";
        }
    }
    public class Cat extends Animal{
        public String shout(){
            return "喵喵";
        }
        public String toString(){
            return "The Cat's color is " + this.getColor() +", and it shouts "+ this.shout() + "!";
        }
    }
    

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

    类图中至少两个类。

    截图:

    练习

    使用TDD的方式设计关实现复数类Complex

    (面向对象程序设计-4)

    PSP时间

    步骤 耗时 百分比
    需求分析 15min 4.55%
    设计 35min 10.61%
    代码实现 180min 54.545%
    测试 60min 18.182%
    分析总结 40min 12.121%
  • 相关阅读:
    使用淘宝Str2varlist与str2numlist 代替 in/exist ,提升性能(Oracle)
    由浅入深理解索引的实现
    你知道数据库索引的工作原理吗?
    深入理解数据库磁盘存储(Disk Storage)
    如何解析oracle执行计划
    Beyond Compare 4 最新中文版 注册码 key
    并发和并行的区别
    代码复用的规则
    Some Java exceptions, messages and errors.
    菜鸟学SSH(十六)——Struts2内部是如何工作的
  • 原文地址:https://www.cnblogs.com/rh123456/p/6752125.html
Copyright © 2011-2022 走看看