oo第一单元的作业内容主要是针对表达式的求导,并且三次作业的难度逐渐深入
第一次作业
第一次作业过程中,由于对于编程方式不够熟悉,在编程过程中采用了面向对象的编程方式,还是按照表达式匹配是否合法、表达式拆分、拆分项计算的流程来计算。由生成的类图也可以看到,仍然为面向过程的思路。在这次作业的互测过程中,我也发现一些自己编程方式中存在的问题,并且在下一次作业中得以改进。
第一次作业中被发现的bug:
第一次作业中,由于使用大正则表达式对于输入进行匹配,所以对于表达式过长的情况出现了爆栈的问题。在查了一定的资料后发现这个问题可能是自己正则表达式回溯算法中出现的问题。
另外第一次作业中合并同类项的算法出现问题,还没有找到具体原因。
发现别人的bug:
互测过程中,主要关注的方面是他人代码中格式,求导计算,还有最终输出这几个部分,通过构造特殊样例的方式,检查这几个方面的运行结果。
在第一次以及第二次互测过程中都存在的问题就是对于某些带符号指数的错误格式判断的问题。
第二次作业中被发现的bug:
第二次作业的表达式求导由于允许了多项相乘并且加入了sin(x)和cos(x)的求导,因此对于代码结构必须要进行重构,我在第二次作业中对表达式进行了拆分,筛选出每一部分的系数和指数,对相应部分正常求导后再进行合并。
被发现的bug:
主要存在的问题是在输出内容的化简过程中,另外对于某些错误输入的处理也被发现了一定的问题。
发现的bug:
在第二次作业中没有发现过多bug,并且由于对于被测代码的结构不太理解,因此在构建特殊样例的过程中出现了一些困难。
第三次作业没有及时完成,因此没能参与到互测过程中,这里不再详述。
反思:
在这三次作业过程中,存在的最主要的问题是在写好代码之后对于自己代码构造测试样例进行测试时存在的问题。在第一次作业中,由于自己构造的特殊样例没有考虑到过多问题,所以作业代码写好后,测试代码即直接通过,这使我没能及时发现自己代码中存在的细节问题,这些问题在互测过程中也有所体现。我觉得自己在发现代码问题后加以改进的效率很高但是构造特殊样例检查自己代码中存在的bug的方式还不够熟练,在今后的作业过程中,对于自己写好的东西应该多考虑一些角度,构造不同方面的特殊样例,对自己的代码做好格式检查。
收获与体会:
从第一次作业对于编程方式的不熟悉以及编写出的代码风格的疯狂修改,到第三次作业过程中已经可以写出格式较为规范的代码,在这三次完成作业的过程中,对于代码的书写格式方面我觉得自己有了一定的进步。另外,这门课让我了解到一种全新的面向对象的编程方式,拓宽了自己编程的思路。
在这几次作业的过程中,参考了一些优秀的作业代码之后,我觉得自己的作业还是偏重于面向过程的思维方式,对于面向对象编程方式的理解还不够清晰,因此参考好的代码,根据老师和助教给出的思维方式,重新安排自己代码的架构,实现层次化的分析,才能更好的完成今后的作业。