第一单元OO总结
一.基于度量来分析自己的程序结构
第一次作业
由于要求简单,所以代码简单,但是扩展性不强。
程序分析
结构比较简单,用GetTerm方法获取表达式。Term就是一个单独的项,TermMap存放了多项式。
构造了求导方法和print方法。实际上print方法的扩展性不高,toString方法更好。


度量分析

复杂度并不高,而且真正复杂度高的方法是print方法,这是一个相对独立的方法。
第二次作业与第三次作业
第二次作业完成时就考虑了第三次的实现,二者之间改变不多
程序结构
可以认为表达式是由sin函数,cos函数以及幂函数和常数组成。所以就设置了一个父类Term,它有四个子类Xterm,Sinterm,Costerm,
PolyTerm。前三个的含义很明显,最后一个其实是一个数组,代表多个Term相乘。最终代表多项式的类是Polynominal,内含Term类
的集合,表示多个Term相加(减法就是系数为负)。同时有一个PolyMatcher类匹配字符串。每一个Term类以及Polynomial类都有dao
方法(求导)和toString方法,以及化简的方法。


度量分析

程序方法复杂度明显高于其他方法的有toString,equals,change(输入字符串处理)。这些方法其实都相对独立。
二.bug分析
在第三次作业的互测环节中,我被找到了两处bug。一处是tosSring方法的bug,这个bug比较浅显,而且也相对比较
独立。另外一处是在进行多项式乘法时,应该使用正确的clone方法。这算是一个关联比较大的bug。解决这个bug比
较简单,但是当时没有考虑到这一点就是设计上的欠缺了。
三.发现别人程序bug所采用的策略
先是用自己的评测机进行基础功能测试(可能是生成的数据太弱没发现bug),再自己构造数据。自己的构造数据主要
是针对题目的边界条件等一些特殊情况进行构造。这种构造方法就很难找到一些隐藏的bug(比如我自己的bug)。所以
还是要写一个好的构造函数。
四.对比和心得体会
这个单元我的第一次作业有很多面向过程的部分,所以最后就重构了。重构之后的第二次作业和第三次作业的区别比较小,
这个时候我就感觉到了一个好的设计模式能够有多方便。我第三次作业的处理方法其实和大多数同学是相似的。不过与优
秀的同学相比我的不足之处就是优化功能做的不好。我只是将括号展开,然后合并同类项。但是有些同学在三角函数化简
上做了许多工作,而且有许多好的方法值得我学习。我的心态其实开始就有些不对,我认为功能对了就差不多了,但实际
上优化工作量十分大,完成好的优化对我的能力提升也是很有帮助的。
浙公网安备 33010602011771号