OO前三次作业总结
OO前三次作业总结
OO前三次的求导作业,难度为阶梯式递增,不过之前没有太深刻的学习过Java,因此对面向对象的思想还没有完全建立,还是很“面向过程”,但是在这个学习练习的过程中,对面向对象的理解也更为深刻。
一、基于度量分析程序结构
第一次作业
没有运用到继承的思想,只有一个Item类,属性是x的系数和指数。分离读入然后进行求导及输出操作。
第二次作业
共分Factor、Item、Poly三大类,即因子、单项式、多项式三类。其中Factor作为父类,有三个子类,分别是幂类Mifactor,sin类Sinfactor和cos类Cosfactor。
将求导细化,用正则表达式匹配出每一个因子,再对其求导得单项式,然后对单项式求导得多项式,再对多项式求导得结果(其实就是合并)。
第三次作业
应用递归匹配最小因子,再进行求导。
三、自我bug分析
第一次作业bug
1.由于分析的不够到位,在正则表达式的表达中出错,会在符号(+-)后跟空格的情况下将符号单独匹配出来,而导致极其严重的错误。由于当时对java函数的了解十分不充足,没有想到用replaceAll()函数,可在判断完语法错误后将字符串中空格用""替换掉(也就是消去),这样后续正则表达式的书写和匹配都会简化很多。
2.没有考虑到\f\v的非法情况
第二次作业bug
1.中测时发现了+++1此种表达式为合法,返回再次研读指导书并与同学讨论,增加了此种类型的合法判断。
2.强测时挂了三个数据点……发现自己又是在正则表达式中出现错误。表达式中忽略了因子(Factor)匹配时带负号的情况,导致此种全部输出了Wrong Format。
3.不合法表达式的正则表达式漏掉了sin三个字母中两处都有空格的情况。思考不够细致。
第三次作业bug
在递归时思路不够清晰即已出现错误。
四、他人bug分析
1.会用自己在自测时测爆自己的边界数据点进行测试,可能会发现他人与曾经的自己犯下了相同的错误。
2.分析他人代码,寻找不完备的地方进行数据构造
(用脚本跑数据的方法还不是很会orz)
五、Applying Creational Pattern
写之前一定要充分思考、捋顺之后再开始写代码,否则会应对层次理解划分的不够清楚而导致难以修改,而不得不推翻重写,费时费力。再如对父类的继承,父类需要的属性,子类需要增加的方法,等等,一定要弄清楚。同时,建议边写边开着checkstyle规范写作,以免后期难以修改。希望今后能加快理解、写代码和调代码。