OO第一次课程总结

Posted mengxiangjing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OO第一次课程总结相关的知识,希望对你有一定的参考价值。

作业一 多项式运算


  作为一个之前从未接触过java的小白,虽然已经做好了这学期OO很艰难的心理准备,但还是觉得这门课程的难度超出了我的预期。第一周买了一本教程,然后在网上找了一些视频。用了一周的时间自学java,但只是学习了一些基础的语法,并没有学习类和对象的概念以及java面向对象的思想。

  第一周作业发布之后,丝毫没有感受到助教所说的温柔,可能是第一次看到这么长,这么复杂的作业要求。看了助教的MOOC之后,我用了一天的时间速成正则表达式。果然用正则表达式来检查输入是相当方便的。

  第一次作业写的完全就是一个面向过程的代码,一个类也没有,只有一个主函数。我将所有的多项式拆分成多个单项式,我开了三个数组,一个数组保存所有单项式的系数,一个数组保存所有单项式的指数,一个数组保存所有单项式的符号,然后对保存有指数的数组依次遍历。

  第一次作业公测结果出来以后,结果比我想象的要好,只出现了一个bug,是使用正则表达式爆栈了。因为我只使用了一个特别长的正则表达式进行字符串匹配,要想避免爆栈就要一个多项式一个多项式的匹配。

  我拿到的那个同学的代码,他写的也是个面向过程的代码,但是他没有用正则表达式,这位同学写了个状态机,一共列了十个状态。他公测没有错,所以我主要检查了他的数组越界问题,并没有发现什么错误。

作业二&三 单部电梯


   第二次作业让我意识到,这门课的作业不仅仅是让我们解决一个题目,更是解决一个简单的工程。这次的指导书的篇幅相比上次膨胀了许多。为了不漏掉其中的一些细节,读指导书的过程中,我就把重点写到一个txt里,毕竟好记性不如烂笔头。

  这次作业要求有五个类:电梯类、楼层类、调度器类、请求类、请求队列类。第一次是用一个面向过程的代码水过去的,这次必须要用面向对象了。问题的关键在于每个类里有哪些属性,每个类之间的关系是什么。在我一开始设计楼层这个类时,我错误的认为楼层按向上和向下没有什么区别,因为你不管按哪个键,电梯都会运行到你所在的这个楼层,而电梯接下来怎么运行,那就是下一条请求决定的了。后来我发现,如果考虑到同质请求,那么楼层请求的向上还是向下就有关系了。所以在这个地方走了一些弯路。这次作业爆出的bug是输入的时间超出int范围,这确实也是因为自己的不细心造成的,使某些请求没有经历时间是否超出int范围的判断。

   第三次作业是第二次作业的延伸,主要就是要求在上次作业的基础上实现捎带功能。在设计上要求了接口的实现和继承父类的方法。

  对于捎带请求的处理,我一开始采取的算法让我走了不少弯路。我每次让请求队列中没有执行的第一条请求当做主请求,然后遍历请求队列得到一个主请求可捎带请求的集合,接着一次性执行完主请求前的捎带请求。我后来发现了这个算法的问题:每当我们执行一条捎带请求,就可能会有新的请求成为当前主请求的捎带请求。这是一个动态的变化。所以,我把算法改正为:每执行完一条捎带请求,再重新遍历请求队列,得到一个新的捎带请求的集合。

  这次主要爆出的bug有两个,一个是捎带请求是同楼层的情况,这个时候只执行一次。这个确实是自己的疏忽,没有意识到这个问题。第二个是设计上的问题,每次我找新的主请求时,我会把请求队列中第一个没有执行的请求当做主请求,可我没有考虑这个请求是不是同质请求。

技术分享图片

 

 技术分享图片

 找bug策略


 

1、通读代码,看看有没有逻辑性的错误

2、顺着错误分支树依次测试

3、查看对方的readme,对于有争议的地方进行测试

4、对大数据,边界数据进行测试

总结


 

  这学期的OO第一次作业就让我有了上学期计组P5的感觉,前两次作业都是从周一开始做的,发现时间很紧张,所以第三次作业从周末就开始做了。这门课也很大程度上改掉了我的拖延症。

  从这三次作业来看,我觉得我目前的代码有了面向对象的影子,但在很大程度上,还有着面向过程的思想。其次,我的代码不够简洁,经常出现相似的代码段。然后就是代码风格很差,甚至还出现了用拼音命名变量名的情况。接下来,还是要提升自己的专业素养,夯实基础,并且要有一种敢于向困难发起挑战的勇气,下次的作业比这几次的难度有了一个质的提升,现在要做好心理准备,迎接新的挑战。

以上是关于OO第一次课程总结的主要内容,如果未能解决你的问题,请参考以下文章

oo 第四单元UML&课程总结

OO课程学期总结

OO课程学期总结

OO_Unit4总结&课程总结

OO第一单元总结

OO第四单元及课程总结