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

    2017-2018-2 20165309实验二《Java面向对象程序设计》实验报告

    一、实验内容

    1. 初步掌握单元测试和TDD

    2. 理解并掌握面向对象三要素:封装、继承、多态

    3. 初步掌握UML建模

    4. 熟悉S.O.L.I.D原则

    5. 了解设计模式

    二、实验步骤

    (一)单元测试

    1.三种代码:伪代码、测试代码、产品代码

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

    • 先用自然语言写出从意图层面来解决问题的伪代码:
        百分制转五分制:
        如果成绩小于60,转成“不及格”
        如果成绩在60与70之间,转成“及格”
        如果成绩在70与80之间,转成“中等”
        如果成绩在80与90之间,转成“良好”
        如果成绩在90与100之间,转成“优秀”
        其他,转成“错误”
    
    • 然后用Java语言将伪代码“翻译”成产品代码MyUtil.java
    • 写测试代码MyUtilTest.java来检验产品代码:
      • JUnit测试用例:
        • 正常情况
        • 错误情况(负数,超过100的数)
        • 边界情况(0,60,70,80,90,100)
      • 在项目上右键选择New->Directory建目录test,右键单击test目录,在弹出的菜单中选择Mark Directory as->Test Sources Root来设置SOURCEPATH环境变量。
      • 测试通过的截图如下:
    • 完善产品代码。
    • 测试代码和最终的产品代码在代码链接里。

    2.测试驱动开发TDD(测试代码->产品代码)

    • 在新目录下创建StringBufferDemo类,
      鼠标单击类名旁出现的灯泡状图标,在弹出的菜单中Create Test
    • 测试StringBufferDemo类的方法charAt()capacity()indexOf()length():
      • char charAt(int index)返回此序列中指定索引处的 char 值。
      • int capacity()返回当前容量。
      • int indexOf(String str)返回第一次出现的指定子字符串在该字符串中的索引。
      • int length()返回长度(字符数)。
    • 测试结果如下:
    • 代码链接

    (二)对设计模式示例进行扩充,让其支持Long类

    • 如果要求支持Long类,Document类要修改构造方法,这违反了OCP原则。封装、继承、多态解决不了问题,这时就需要设计模式了:
      • class Long extends Data
      • class LongFactory extends Factory
    • MyDoc类中添加测试代码:
      public class MyDoc {
      static Document d;
      public static void main(String[] args) {
          d = new Document(new LongFactory());
          d.DisplayData();
          }
      }
      
    • 运行结果如下:
    • 代码在码云链接里。

    (三)以TDD的方式开发一个复数类Complex

    • 伪代码:
      Complex类要输出实部、虚部,并按照a+bi的形式输出复数。
      Complex类中有两个变量,实部A和虚部B。
      
      方法:
      getA(int a);返回实部
      getB(int b);返回虚部
      ComplexAdd(Complex c);实现复数相加
      ComplexMinus(Complex c);实现复数相减
      ComplexMulti(Complex c);实现复数相乘
      ComplexDiv(Complex c);实现复数相除
      toString(int a,int b);将复数输出成a+bi的格式。
      
    • 测试结果:
    • 产品代码和测试代码在码云链接

    (四)面向对象三要素

    • 抽象

    • 封装、继承与多态

      使用UML对实验二中代码进行建模

      • 代码:
      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 Cat extends Animal {
      public String shout() {
          return "喵喵";
      }
      public String toString() {
          return "The Cat's color is " + this.getColor() +", and it shouts "+ this.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() + "!";
          }
      }
      
    • UML图(由网页ProcessOn制作)

    • 参考资料

    三、实验中遇到的问题及解决

    • 问题1:当时安装IDEA的时候选择的都是默认路径,而且也不算是经常用,所以没有找到Junit jar 包。
    • 解决1:右键桌面上的IntelliJ IDEA Ultimate,点进属性里面,复制地址再粘到“+”就方便找到了~
    • 问题2:对StringBuffer的了解不够。
    • 解决2:可以参考学习这个网址:www.runoob.com/java/java-stringbuffer.html。
    • 解决3:long型的范围是-2147483648~2147483647
    • 问题4:在设计实现复数类时不知道怎么去拼接字符串。
    • 解决4:尝试concat()方法后仍存在问题,突然又意识到可以直接+....

    四、实验收获

    这次的实验让我学会了如何去写测试代码,也让我规范了编写代码的习惯。跟着老师的博客教程和蓝墨云上的要求去做的同时,我也意识到了自己对一些基础方面的知识还不够熟悉...得认真看书才是。

    步骤 耗时 百分比
    需求分析 15min 12.5
    设计 20min 16.7
    代码实现 40min 33.3
    测试 25min 20.8
    分析总结 20min 16.7
  • 相关阅读:
    3DMAX贴图无法显示
    3DMAX2016安装教程【图文】
    OSG学习:转动的小汽车示例
    JAVA Eclipse 快捷键
    解决JQUERY在IE8,7,6下将字符串转成XML对象时产生的BUG
    毕设二:python 爬取京东的商品评论
    redis 注册为服务
    python 爬取bilibili 视频弹幕
    python 爬取36kr 7x24h快讯
    jQuery实现表格冻结行和列
  • 原文地址:https://www.cnblogs.com/wsj-wsj-wsj/p/8907222.html
Copyright © 2011-2022 走看看