写在OO作业之前
在正式写oo作业之前,先说一些“废话”吧,就当是对oo的吐槽。
事实上,早在大一的时候,听说数分很难,然而事实证明数分并没有有让我通宵的体验。
在大二上的时候有一门课叫祭祖,号称是第一门给我们“推背感”的课。但是我也是很好的摸了过去,从P5才开始通宵。(虽然本菜鸡只是止步于P6而已)
早有耳闻北航的oo是一门非常“坑”的课程,开始我还不以为然。然而当第一周基本啥都没讲就给我们留了一个多项式相加的作业时,我才意识到事情并没有那么简单。
到第三周的ALS电梯已经是需要熬到1点钟,我一边血泪控诉oo(骂着我这个版本的eclipse不好用,控诉这门课的难度(心态崩了) )一边写代码debug。直到DDL前一天才解决了所有的bug,设计总算有了眉目。才仅仅经过三周,感觉像经历了什么大的挫折一样。(可能是因为我太菜了)
那么接下来我再来针对具体的三次作业来写写本菜鸡是如何在三次作业中survive下来的。
第一次作业:多项式加法
事先声明的是,在此之前我没有学习过面向对象的课程,包括暑期的面向对象先导课我也没有参加。(听说暑期的先导课效果很好,如果当时学习了估计这次作业不是很成问题)
甚至我连JAVA都没有学过,还好在寒假的时候听了同学的建议,在网上找了JAVA的学习视频学习了一段时间。至于学习效果如何,当然是不太好的。因为只是看视频,没有动手写代码,没有经过系统的训练。这样学习一门语言,往往只是掌握了基本的语法而已。对语言的运用则很成问题。虽然掌握的不好,但是不至于无法入门,总比零基础来编写要好。
因为对JAVA面向对象思想理解的不深,导致最后差点写成了个和C差不多,面向过程的代码。好在第一次作业比较和善之处,是PPT上给出了一个大体的框架。根据这个框架来补充代码,基本上算是勉强实现了面向对象。
这里附上度量分析和类图

度量分析:

类图:

可以看出来飘红的点是圈复杂度,方法则是parsePoly,即将字符串分析出多项式的方法。这个方法圈复杂度高的原因恐怕是因为没有使用方便的工具matcher和parseInt来读取数字,而是使用了很麻烦的方法(即C语言的方法)来读取,导致这个方法需要的工作太多。
设计思路上完全与PPT上的框架一致,因此不在此赘述。总的来说,以前没有接触过面向对象,第一次作业能按照PPT的指导来写面向对象,可能算是一个优点吧。

代码反思:

(1)一开始在编写的时候,根据前辈的慕课教导,使用了正则表达式这一强大而可靠的工具,这点还是值得庆幸的。如果没有了解到这个工具,按照状态机来判断格式,洋洋洒洒能写出庞大的代码量。但是那样的代码,无论从可读性,可靠性,都不如利用正则表达式来的实在。而且用状态机来写,难免会出现考虑不周的情况,从而让人抓住马脚。
(2)早在寒假时就接触到了一句格言“不要重复造轮子”(Stop Trying to Reinvent the Wheel)可能辛辛苦苦码出来一堆东西,最后发现早有现成的工具让我来用了。比如这次作业中,读取数字这一部分,我采用了如下代码
if(buf[i] == '-') negative = -1; else {for(current=0;buf[i]>='0'&&buf[i]