OO第一单元作业总结
前言:
刚接触oo这门课时还是在学长学姐的快落吐槽中(作为助教准备狂虐我们时的快落),寒假的预备作业昭示着oo这门课作业一定少不了(太魔鬼了吧,寒假刚放假,美赛还没搞完,oo作业已经开始了?)果不其然,刚开学就被三次作业强度递归增加地蹂躏,被oo虐一时爽,一直被虐一直爽。不过每次在读作业指导书的时候是真的爽,咬文嚼字过后肝代码的感觉是真的爽(感谢助教的辛勤付出,让指导书越来越完善,鞠躬)三次作业下来给我最深的感受不是面向对象时的不知从何下手的慌得一批,而是每次闷头肝完代码后经过测试和互测,对自己所写代码框架搭建的反思。是哪里的杂乱无章导致的bug出现,个人认为bug的出现除去那些手残、脑残导致的变量名错误、逻辑错误外,更应该归结到框架的搭建不足上...
一、代码度量分析
由于第三次作业掉到南湖并且溺亡了(哭),所以就体系框架最清晰的第二次作业做了一下分析:
第二次作业是涉及到了sin(x)和cos(x),所以在第一次作业上的基础上加入了term类,对常数、幂函数、三角函数进行区别化分析。
Main类作为主导类读入字符串以及处理异常(Ctrl + D),然后传入Poly类,对多项式进行初步处理,用超长的正则表达式判断是否合法,然后分割字符串成单项,传入Term类。
关于这个超长的正则表达式,自认为自己处理得海星,直接上图:
就是把构成项的因子,先用正则表达式描述出来,再拼接成项,然后区别对待第一项和其他项,从而用正则表达式表示出多项式所有的合法情况。利用con、power、tri代替因子的正则表达式就可以避免超长串的出现了:-)
缺点就是第二次作业的魔鬼优化。。。。卧佛了,那个魔鬼的Collect类把所有满足sin和cos次数分别相差2的情况都合并了,于是就出现了负优化,以及合并同类项一类的重复计算了数遍,导致强测GG,哭)。同时手残把关于单独项0的情况的省略优化写多了一种不该优化的情况,0-bulabula,把0和第二项的负号都抹掉了,互测也GG了于是,哭)。优化真的是要好好思考一番的,本人就是头脑一热,优化反而丢了西瓜芝麻也没捡到。。
二、bug分析
bug主要出现在Poly类的正则表达式以及print类的优化输出上,这些bug的出现主要是由于多项式分析不够全面,以及优化时的不成系统。设计上的欠缺主要是在优化上是想到一条就写一句那种,就很没有体系和结构,所以应该把放到一个新的类里,将所有情况放到里面,同时方便debug
三、互测、自测策略
利用大佬提供的加特林扫射以及python的Xeger包生成随机字符串,成功AOE并且自刀,python牛皮(小声比比)
四、hope for future
学习大佬架构,认真学习菜鸟教程(菜到哭泣),希望自己能设计出结构越来越好的高效率高性能代码(划掉)