zoukankan      html  css  js  c++  java
  • 20172311 2017-2018-2 《程序设计与数据结构》实验二报告

    20172311 2017-2018-2 《程序设计与数据结构》实验二报告

    课程:《程序设计与数据结构》
    班级: 1723
    姓名: 赵晓海
    学号:20172311
    实验教师:王志强
    实验日期:2018年4月18日
    必修/选修: 必修


    1.实验内容

    (1).初步掌握单元测试和TDD
    (2).理解并掌握面向对象三要素:封装、继承、多态
    (3).初步掌握UML建模
    (4).熟悉S.O.L.I.D原则
    (5).了解设计模式


    2.实验过程及结果

    实验(1):

    要求:
    • 参考http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST 完成单元测试的学习
    • 提交最后三个JUnit测试用例(正常情况,错误情况,边界情况)都通过的截图,截图上要有画图加水印,输入自己的学号
    • 本提交点考查JUnit会不会使用,测试用例至少要包含正常情况,错误情况,边界情况的测试
    结果提交截图:

    图一:

    图二:

    实验最终代码链接:

    MyUtil.java
    MyUtilTest.java

    本实验收获:
    • 这个实验目的是让我们学习的是单元测试(这里的单元测试并不是我们固有观念里的考试)。什么是单元测试?单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。Java编程时,程序员对类实现的测试叫单元测试,通过单元测试我们可以减少所写类中的Bug,这大概就是我所理解的单元测试了。补充一点,单元测试的过程也叫做TDD(Test Driven Devlopment, 测试驱动开发)
    • 那么问题来了,怎样实现单元测试呢?难道说只能通过if语句判断,然后输出来判断(实验过程中发现这样做需要纯手敲很多代码,工作效率很低)!!!!!或者说有什么更好好的途径来实现单元测试吗?答案就是Java中有单元测试工具JUnit来辅助进行TDD,具体的准备工作以及JUnit的使用方法,在参考资料中都有详细记录。
    • 通过实验我深切认识到代码的实现过程中单元测试的重要性,了解到了诸如伪代码、产品代码、测试代码、TDD等全新的概念,并且学会了如何通过JUnit来高效的实现单元测试,受益匪浅。

    实验(2):

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

    实验最终代码链接:

    StringBufferDemoTest.java

    本实验收获
    • 本实验的目的是为了让我们进一步学习使用JUnit辅助完成TDD,同时对JAVA中自带的StringBuffer类研究学习一波。通过本实验我不仅进一步学习了使用JUnit进行TDD测试,而且也彻底打开了我用JDK API的大门,认识到了这个辅助文档对于我们学习JAVA的重要性,受益很是匪浅!!!!

    实验(3):

    要求:
    • 参考实验二 Java面向对象程序设计
      对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理解设计模式

    • 用自己的学号%6进行取余运算,根据结果进行代码扩充:
      0:让系统支持Byte类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
      1:让系统支持Short类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
      2:让系统支持Boolean类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
      3:让系统支持Long类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
      4:让系统支持Float类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
      5:让系统支持Double类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印

    结果提交截图:

    实验最终代码链接:

    MyDoc.java

    本实验收获:
    • 本实验的目的主要有两个(因为实践有点懵逼,涉及到了多态,还不是很了解!!故而强行分为概念类和实践类两部分!!)吧!
    • 一:初步理解设计模式中的OCP和DIP这两种模式。补充说明一下设计模式:面向对象三要素是“封装、继承、多态”,任何面向对象编程语言都会在语法上支持这三要素。如何借助抽象思维用好三要素特别是多态还是非常困难的,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,依赖倒置原则)

    关于OCP:对扩充开放(Open For Extension )要求软件模块的行为必须是可以扩充的,在应用需求改变或需要满足新的应用需求时,我们要让模块以不同的方式工作; 对修改封闭(Closed for Modification )要求模块的源代码是不可改动的,任何人都不许修改已有模块的源代码。 基于OCP,利用面向对象中的多态性(Polymorphic),更灵活地处理变更拥抱变化,OCP可以用以下手段实现:
    (1) 抽象和继承
    (2)面向接口编程

    关于DIP:高层模块不应该依赖于低层模块。二者都应该依赖于抽象抽象不应该依赖于细节。细节应该依赖于抽象

    • 二:让系统支持Double型。Document类本来是只支持整数型,现在通过继承抽象类及一定的设置可以让系统支持Double型等,可能涉及到了多态(有的地方看不太懂),我就是照着葫芦画瓢而已,在接下来的学习中一定下工夫去学习这一块知识(说实话,这块挺难的!!!)。
    • 通过对实验(3)的学习之后,还是那句话:受益匪浅(最起码知道了要做什么,虽然还是不知道怎么去做)!!!

    实验(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)
    
    结果提交截图:

    实验最终代码链接:

    Complex.java
    ComplexTest.java

    本实验收获:
    • 本实验旨在让我们用TDD的方式开发一个Complex类,该类需要包含一些指定的属性和方法。需要注意的是TDD的方式开发类需要先写出测试代码,即表明需要具备的方法和实现的功能,然后编写产品代码。这与我们常规的直接编写产品代码的方式恰恰相反。但是养成这种习惯对我们以后的编程会有非常大的帮助(有助于提高效率)。这个实验算是对实验(1)和实验(2)的进一步延伸吧!!!收获颇多!

    实验(5):

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

    本实验收获:
    • 本实验旨在让我们学会怎样写UML图,同时培养编写代码前先写UML图的良好意识。希望在以后的学习中继续深入的学习吧!!!

    3.实验过程中遇到的问题和解决过程

    • 问题:ComplexTest.java执行时出现错误,截图如下:

    • 出错原因,经检查发现toString方法编写出现错误,想输出a-bi的形式需要在a和b之间加一个""使a和b以字符串形式输出,而不是进行减法运算。有错的Complex截图如下:
    • 改正过后的Complex类截图如下:

    4.感想

    JAVA的学习之路还有很长的路要走,继续坚持吧!

    5.参考资料

  • 相关阅读:
    POJ 1015 Jury Compromise【DP】
    POJ 1661 Help Jimmy【DP】
    HDU 1074 Doing Homework【状态压缩DP】
    HDU 1024 Max Sum Plus Plus【DP,最大m子段和】
    占坑补题。。最近占的坑有点多。。。
    Codeforces 659F Polycarp and Hay【BFS】
    Codeforces 659E New Reform【DFS】
    Codeforces 659D Bicycle Race【计算几何】
    廖大python实战项目第四天
    廖大python实战项目第三天
  • 原文地址:https://www.cnblogs.com/zhaoxiaohai/p/8932141.html
Copyright © 2011-2022 走看看