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

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

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

1.实验内容

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

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

  • 3.初步掌握UML建模

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

  • 5.了解设计模式

2. 实验过程及结果

  • 面向对象程序设计-1:通过实验一的学习与尝试,讲述的是伪代码 -> 产品代码 -> 测试代码的编写过程,对于简单的程序,我们可以在脑中想想就好了,但是针对复杂的代码,PP7.4、PP8.1、PP8.6、PP9.3(这个就是在找共同特征和每一个所特有的性质,需要写写)等的编写过程都需要事先在写写伪代码之类的,之前也写过伪代码,但是自己写的都含有java的语句或是修饰符之类的,并且也画过图来进行设计。通过学习,发现伪代码的编写,可以算作是自己程序的设计图纸了。使用JUnit对一个程序进行正常情况、错误情况、边界情况三种的测试。系统的阐述了一个程序编写的标准过程,虽然有些繁琐,但是很是有用。
  • 如果JUnit报告了测试没有成功,它会区分失败(failures)和错误(errors)。失败是你的代码中的assert方法失败引起的;而错误则是代码异常引起的,例如ArrayIndexOutOfBoundsException。

  • 面向对象程序设计-2(“测试驱动开发”(TDD)):基于TDD,我们不会出现过度设计的情况,需求通过测试用例表达出来了,我们的产品代码只要让测试通过就可以了。很大程度的节省了类似供大于需的问题,同时也便利了编写产品代码。

    • TDD的目标是"Clean Code That Works"
    • TDD的slogan是"Keep the bar green, to Keep the code clean"

  • 面向对象程序设计-3:
  • SRP(Single Responsibility Principle,单一职责原则)
  • OCP(Open-Closed Principle,开放-封闭原则)
  • LSP(Liskov Substitusion Principle,Liskov替换原则)
  • ISP(Interface Segregation Principle,接口分离原则)
  • DIP(Dependency Inversion Principle,依赖倒置原则)

OCP原则是一种相对的开放与封闭,抽象和继承以及面向接口编程的方式可以解决。其余四个的理解不是很清楚,查过资料也不是特别懂。所以,希望能在以后编写的项目里继续通过实践的方式继续学习。

  • 面向对象程序设计-4:以TDD方式进行编写一个复数的运算,这道题在编写测试代码的时候很神奇的出现一堆红线,自己照着给的参考作业模仿,结果就是照葫芦画瓢,忽略了这个测试代码是基于自己编写的代码产物,但是这个代码是如何编写的,和参考作业的源代码是否一致就不好说了。所以,我的模仿只是浅层次的模仿,并没有深入的编写。所以,我参照着我的自己的代码进行编写测试代码,根据红线的警示进行修改。

  • 面向对象程序设计-5:StarUML的使用,在第四章已经简单的讲述了,是自己没有仔细看就问问题,结果向老师问了一个特别特别简单的问题--就是第二个框里和第三个框里如何放内容的问题(实际上是自己英语词汇不够导致的,下次会注意的)其实,UML的作用是以图文结合的方式进行的与伪代码起到类似的作用。UML类图中的第一个框是类名,第二个框是属性(数据),第三个框是操作(方法),在下面的实验过程遇到的问题中就有体现出自己当时对知识的不够透彻。

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

  • 问题1:UML类图中的属性和方法

  • 问题1的解决方案:针对这个问题,本质上是自己没有理解英文单词造成的,导致自己在实验上交的第一幅图片有问题,没有分清定义的是属性还是实现的方法。好在自己在写关于PP9.3的时候做了一个UML类图(估计是有了这张照片才使自己成绩没有为零)。

  • 问题2:复数的运算

  • 问题2的解决方案:好在老师在布置作业的同时给了优秀提交作业样板,自己照着模仿,但是就是一直有红线问题。问过老师,结果是自己的测试类照着模仿,但是自己编写的类没有照着图片进行模仿,所以导致自己照葫芦画瓢还没画对。

其他

  实验二的五个实验,学习的内容很多,尤其是那几个原则的问题,仍是云里雾里的,TDD和单元测试能初步掌握,UML类图的编写是这几个实验相对简单的一个,会在以后的学习中不断的掌握和深入的理解。

参考资料

Intellj IDEA 简易教程

posted @ 2018-04-24 21:23  三金哥  阅读(257)  评论(6编辑  收藏  举报