• 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.参考资料

  • 相关阅读:
    自食其力!ASP.NET 4打造HTML5视频控件
    delphi 拖放操作http://topic.csdn.net/t/20030306/10/1497344.html?1026446129
    delphi开发的小技巧http://www.cto360.com/a/5000086716.shtml
    TThread 类 详细解析 (原帖 华夏黑客同盟)http://www.cppblog.com/Khan/archive/2006/11/21/15503.html
    delphi 多线程同步 互斥变量,信号量,事件对象。http://www.bianceng.cn/Programming/Delphi/200912/12689.htm
    如何利用socket进行HTTP访问http://blog.csdn.net/sanfengshou/archive/2011/03/07/6228250.aspx
    TCP, Scoket, HTTP
    Delphi开发嵌入式IE浏览器监控程序http://www.pasou.cn/edu/html/List3899_3.html
    Delphi实现网络蚂蚁和FlashGet的悬浮窗口,拖动
    delphi调用C#写的web服务例子(重点 InvRegistry.RegisterInvokeOptions(TypeInfo(ServiceSoap), ioDocument);)
  • 原文地址:https://www.cnblogs.com/zhaoxiaohai/p/8932141.html
Copyright © 2020-2023  润新知