其他分享
首页 > 其他分享> > OO第四单元实验总结报告

OO第四单元实验总结报告

作者:互联网

一. 第四单元架构设计

本着轻松愉快的思想,我在做第四单元时没有做架构设计(我知道可以利用中间层次来建立树形、图形结构来减少时间复杂度,但数据量太小了,完全没有必要),所以就去实现所要求的方法,每个都遍历来做。我的确用了一个别的类来提高代码复用性(将像是寻找Class/Interaction之类的方法),但这主要是为了让类的行数不超过500行,我一开始都是放在一起的,但代码太长了只好放到别的类里面了。
本次实验中我尝试使用了stream来完成要求,这样代码书写起来很愉快,最后得到的代码可读性也要比利用分支很迭代写出来的高很多。当然,这种每次都遍历的策略势必会导致复杂度爆炸,但能过本次作业就行了。

二. OO思想在实验中的递进

多项式化简

一开始给人的感觉就是难度很高,但难度位置不太对。第一次实验最为重要的是算法面的思想,我是采用了递归下降法。OO思想主要体现在对数据的管理上,我们应该怎么安排数据之间的关联关系。通过递归的管理数据,我们能够管理嵌套的数据。当然对数据的管理也是OO很重要的话题,我这里采用了一种通用的类来管理所有的项,再对一致的项进行运算与输出格式化。

电梯

第二次实验为我们介绍了Java的多线程机制,我采用的是经典的生产者-消费者模式来书写代码。实验中横向与纵向的电梯,以及相应的横向、纵向的调度器,这些元素之间有着很强的相关性,与之对应的是可以采用继承或实现的方式来增强代码复用性。这个单元可以实验不同的多线程设计范式,也对类与继承有要求。

规格化设计

第三次实验提供了一个现有的元素层次关系,我们需要的是去安排恰当的中间数据来增强对结果的维护,使得数据能够在要求的时间复杂度中得出。OO的结构是由课程组安排好的,我们只用去实现相应结构。已经给出的部分是很好的OO思想的体现,而缓存中间变量来提升程序性能感觉更是算法段的思路。

UML解析器

第四次作业可以不依靠任何结构进行。当然也可以使用结构来构建,只是感觉这次实验没什么这方面的导向。

三. 测试思想在OO中的应用

我只在第二次与第三次中使用了自动化测试工具(结果就是第一次与第四次都有挂掉的点,由此可见测试还是很重要的)。
第二次实验中我构造了随机的数据生成器,并搭了用于检验合法性的测评机。主要思路是去看电梯和人的表现是否合法,以及检验程序是否能正常终止。合法性检验是相对于对对象建了一个有限自动机,来检查每一步转移与结果的合法性。但是最后还是被hack掉了一组数据,只能说随机黑盒数据还是太弱了一点。
第三次作业也是随机的数据生成器,但是对于几个复杂度较高的指令,我专门生成了一些策略来看时间是否超标(事实证明这是十分有用的,因为我一开始Dijkstra写错了,导致复杂度假了,通过相应测例我发现了这个错误)。正确性检验中我是与其他人对拍进行的(因为真要写评测机的话难度与这次作业是几乎相同的),最后通过对拍我发现了一些十分低级的错误,最后能够在这次作业中全对(部分原因也是有JML后本来程序也不大可能错,只是理解上有偏差或者写错了才会导致错误)。

四. 课程收获

首先是会写Java了,因为之前写过一点C++,上手Java还比较快,毕竟语法方面非常类似,只是要去熟悉一切都是对象的语言风格,以及熟悉对象使用都是引用的风格。总体来说会写简单的Java代码了。
然后是学会了一些面向对象的设计模式,这些设计模式更像是一些范式,可以在所有语言中通用。这些思想应该才是本门课程的核心,而Java则只是一个实践的载体。了解设计模式可以写出各项性能更好的代码。
这门课程还有研讨课,增添了与其他人一起讨论设计方案,分析代码,可以从其他人学会很多。
平时学习一些算法、模式也需要上网搜索资料,我的递归下降就是借鉴了网上的代码写出来的。像是后面的一些算法部分也需要查找资料才能写出来。

五. 对课程组的建议

标签:OO,Java,总结报告,代码,电梯,实验,可以,单元
来源: https://www.cnblogs.com/godel-bach/p/16411661.html