301
社区成员
发帖
与我相关
我的任务
分享下图为最终迭代版本类的数量、类的行数和代码总行数:

主要是Mono类行数比较多,因为要实现相加和相乘,我使用的是枚举的方法,行数较多。
迭代开发的过程中,新增代码不多,主要源于第一次作业的架构可扩展性高。

类Mono和Lexer的OCavg较高,Mono的WMC较高

本人画的只是大体上的,具体Parser的toExpr还需要通过递归下降的方法实现,ToPoly也同理。
整体架构比较清晰,迭代的过程中没有重构,如果出现新的因子,如exp,自定义函数,只需要添加一些共有方法,toPoly,derive等,第三次作业添加了derivative因子,思路还是没变,先将整个字符串变成expr,再变成poly进行运算,合并。
三次作业,其中第二次的强测错了特别多,主要是错在了输出exp因子上,由于我将exp的指数放在外面,最后输出的时候括号出现了问题。二是优化exp(0),我使用了replace函数将exp(0)变成1,最后输出可能会出现(1)^2这种形式,导致输出错误。
第二次作业由于强测错了太多没有进入互测屋,而第一次和第三次同学们的代码都十分健壮,也没有测出来。
合并同类项在将表达式化成多项式可以解决
输出层面的1*,^0,exp(0),单项式系数为零的情况,可以前两个可以通过replace简化输出,最后一个可以特判,exp(0)则需要将exp的指数乘到因子里面再进行replace。
由于假期没预习,个人认为第一次作业难度比较大,不知道该如何实现分配律,后来知道了可以先将因子转化成多项式再进行乘法。
通过第二次的强测失利,我了解到了测试的重要性,第三次充分进行了测试,最后顺利通过。
通过第一单元的学习,我对面向对象编程有了更深的了解,对于不要重复造轮子也有了更深的认识,要善于运用方法,下一个单元的学习我会充分进行测试。
在助教的耐心解答下,第一单元比较顺利,感谢助教~