OO第一单元总结
以下是本人在前三周做面向对象作业所做的总结。
总体分为homework1, homework2, homework3 的思路总结和bug的策略以及心得体会。
homework1
刚开始接触面向对象的思想,其实我接受起来还是有点困难的。由于第一次作业的复杂度较低,我直接当了一main战士。这使我的代码没有任何的可拓展性,直接导致了下一次代码的重构。
思路:使用hashmap存储读入的表达式,hashmap能够较为便捷地起到合并同类项的效果。对每个hashmap中的元素,求导之后输出。
bug:在为了省去输出的第一个+号时出现了bug。
这次作业遇到的难点主要还是java语法上的问题以及正则表达式编写的问题。
homework2
这次作业实际上我还是面向过程的思路。沿用了作业1的大部分思路。
思路:这一次作业,由于存在连乘,每一项可以整理为一个x,sin(x),cos(x)和带符号整数的四元组,所以我用hashmap存储表达式中的每一项,其中key为x,sin(x),cos(x)的指数,用空格分开,之后可以用String类的split方法分开得到。随后通过四元组的求导公式得出结果。另外,由于要检查wrongformat,我在Mainclass中使用了try-catch语句,在Func中完成绝大部分工作。
bug:因为只允许出现空格和制表符的空白项,而我没有检查这一部分,直接移除了所有的空白。
我认为这次作业的难点在于输入的处理。
homework3
这次作业我使用了工厂模式
思路:在检查完空白项导致的wrongformat之后,由于难度较大,我为了简化难度,没有使用容器存储整个表达式,而是边读入边求导,所以只能放弃优化。
不断分离出表达式中还没有被求导输出的第一个项,不断将该项的第一个乘数与剩余的乘数分离开来,使用工厂识别第一个乘数,然后递归使用乘法求导公式,最后输出求导结果。如果被分离出来的第一个乘数不是因子,则输出wrongformat。
bug:由于输入输出的格式没有把握好,导致出现了较多bug
·表达式因子过多去括号,如((x)+(x))会被改为 x)+(x 导致输出wrongformat
·分离出来的第一个乘数忘记支持表达式因子导致wf
·检查空白项时,带符号整数空白导致wf
·输出时,输出如 +(x+x)这种不符合format的格式
可以看到,整个作业的耦合度还是较高,希望在之后的作业中我能够加以改进。
互测bug策略
由于我对评测机的搭建不熟悉,所以采用的主要是阅读他人的代码的静态审阅模式找bug。
这种方法的不足之处是效率过低,而且遇到可读性较差的代码时根本无法开张。
舍友搭建了评测机,甚至还用评测机找出了我的数个bug(x),所以往后的学习中我也会尽可能熟悉评测机的搭建。
心得体会
这三次作业是我面向对象程序设计思维的入门,3次作业难度层层递进,带给我很大压力的同时的确也让我感受到了进步。
可以看到,从第一第二次到第三次,我的编写方法有了很大程度上的转变,这样的写法不仅能够简化构建思路,也提升了代码的可读性,便于后续debug。