zoukankan      html  css  js  c++  java
  • 2017-2018-2 20165228 实验二《Java面向对象程序设计》实验报告

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

    相关知识点

    三种代码

    • 伪代码:注释,与具体编程语言无关
    • 产品代码:由伪代码翻译而来的具体编程语言语法相关的语句
    • 测试代码:以测试用例来测试产品代码中是否存在bug
      测试驱动开发(TDD)
      TDD的一般步骤如下:
    • 明确当前要完成的功能,记录成一个测试列表
    • 快速完成编写针对此功能的测试用例
    • 测试代码编译不通过(没产品代码呢)
    • 编写产品代码
    • 测试通过
    • 对代码进行重构,并保证测试通过(重构下次实验练习)
    • 循环完成所有功能的开发
      TDD的编码节奏是:
    • 增加测试代码,JUnit出现红条
    • 修改产品代码
    • JUnit出现绿条,任务完成
      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,依赖倒置原则)

    实验内容

    (一)面向对象程序设计-1

    检查点要求:
    • 参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST 完成单元测试的学习
    • 提交最后三个JUnit测试用例(正常情况,错误情况,边界情况)都通过的截图,截图上要有画图加水印,输入自己的学号
    • 本提交点考查JUnit会不会使用,测试用例至少要包含正常情况,错误情况,边界情况的测试
    例子说明:我们要在一个MyUtil类中解决一个百分制成绩转成“优、良、中、及格、不及格”五级制成绩的功能。
    码云链接:
    相关截图:

    (二)面向对象程序设计-2

    检查点要求:
    • 参考 积极主动敲代码,使用JUnit学习Java (http://www.cnblogs.com/rocedu/p/4837092.html)
      以 TDD的方式研究学习StringBuffer
    • 提交你的单元测试用例和测试通过的截图,截图要加上学号水印
    • 测试自己会不会写JUnit测试用例
    码云链接:
    相关截图:

    (三)面向对象程序设计-3

    检查点要求:
    • 参考实验二 Java面向对象程序设计对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理解设计模式
    • 用自己的学号%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)
    
    码云链接:
    相关截图:

    (五)面向对象程序设计-5

    检查点要求:
    • 用StarUML对实验二中的代码进行建模,发类图的截图,加上学号水印
    • 类图中只少两个类
    • 类,继承,接口实现,组合在UML中表达
    相关截图:

    实验中遇到的问题

    • 问题1:在第四个提交点用测试用例来调试bug时,出现了下图中的问题:

      当时计算的是11/25,结果应该为0.44,然而计算的结果为0.43999999999999995,这让我很困惑
    • 解决方法:经过认真思考和相关问题查找后,也未能解决此问题。使用其他测试用例调试都通过
    • 问题2:在第二个提交点写的程序中,我发现
     buffer.append('S');  //调用方法append,缓存char型
     buffer.append("tringBuffer");  //调用方法append,缓存String型
    

    buffer.append("StringBuffer")
    

    打印效果一样,区别是什么?

    • 解决方法:通过多次尝试,前者存储的两个数据存在于不同的两个地址内存,只是显示时拼接在一起
  • 相关阅读:
    C++字节对齐与位域
    使用GDB调试将符号表与程序分离后的可执行文件
    在windows上编译apr库
    使用samba共享文件夹,提供给window访问
    Linux常用命令
    使用VS2015编译xlslib库
    VS资源收藏<持续更新中>
    使用Visual Studio 2017 C++17模块(module)特性
    RMAN中format的参数
    C#的Process类的一些用法
  • 原文地址:https://www.cnblogs.com/cloud795/p/8846788.html
Copyright © 2011-2022 走看看