OO第一单元总结
第一次作业
类图
第一次作业由于较为简单,只包含幂函数的加减,于是我只设计了一个多项式类,这个“多项式类”实际上表示了多个单项式的加减关系。
度量分析
感觉第一次作业面向对象的思想体现的不够明显,第一思路还是老一套面向过程的思维方式,且toString函数复杂度偏高,耦合度偏高。
BUG
此次作业在强测和互测中均未发现bug。
在互测中我hack了其他人1次。起初我尝试使用对拍器,却没有找出bug。随后通过通过阅读代码发现有位同学对空格的处理十分复杂,于是思考其此处可能会有bug于是针对性构造数据,发现了其对空格处理上的bug。
总结
本次作业相对简单,后续作业我也基本延续了类似本次作业的架构。
第二次作业
类图
第二次作业添加了关于简单三角函数的支持,并且有了乘法,所以我此处设计了三角函数类Trigo和多项式(单项式)类Poly,Term类表示多个类之间的相乘关系,Express表示多个类之间的相加减关系。问题主要出在,求导和输出函数写的较为复杂,此处没有较好体现面向对象思想,应该对Poly和Term类单独实现求导和输出方法。
度量分析
感觉本次作业是做的最差的一次,复杂度升高,我却没有完全遵从高内聚低耦合的原则,整体设计都需要重构,此处也给我第三次作业带来了很大麻烦。
BUG
此次作业在互测中被发现一处bug。由于在一处小优化上的失误,导致求导结果如果存在常数1,会被忽略掉不输出。
在互测中我hack了其他人1次。此时我没有较认真地看其他人的代码,而是以我自己测试时构造的数据进行尝试,成功发现一位同学的bug。
总结
本次作业相对上次复杂度突然上升,导致我措手不及且时间也较为仓促,所以无论是从设计方面还是测试方面我都做的很糟糕。
第三次作业
类图
第三次作业添加了关于三角函数嵌套的支持,并且有了括号因子,所以我此处基本沿用了上次的架构,设计了三角函数类Trigo和多项式(单项式)类Poly,Term类表示多个类之间的相乘关系,Expression表示多个类之间的相加减关系。并且部分解决了第二次作业中的问题,将求导和输出方法作为一个diffable接口,Trigo、Term、Express和Poly类均继承这个接口。
度量分析
感觉本次作业相对上一次略有改善,但是输出函数仍然较为复杂。
BUG
此次作业第一次在强测中出现bug,由于程序过于复杂,我看错了一个大括号的位置,于是一个小优化被我放错了位置,导致此处优化不仅形同虚设还引入了bug,当0成为因子相乘的时候,我会将其忽略掉。这也反应出我在测试中测试不全面的问题。
在互测中我的程序没有被找出bug,我找到了其他同学共计13个bug,由于我在写本次作业的时候,中测卡了很长时间,于是我构造了很多边界数据,包括空格处理,递归爆栈,特殊字符,三角函数的0次幂等特殊数据,所以我成功找出了其他同学的多处bug。
在互测中我hack了其他人1次。此时我没有较认真地看其他人的代码,而是以我自己测试时构造的数据进行尝试,成功发现一位同学的bug。
总结
本次作业作为复杂度最高的一次作业,我感觉我由于一开始就思考好了整体架构 ,写出来并不费劲。但是整体的面向对象的思路体现的仍然不够清晰。以后需多练习思考体会