OO第一单元总结

OO第一单元总结

以下是本人在前三周做面向对象作业所做的总结。

总体分为homework1, homework2, homework3 的思路总结和bug的策略以及心得体会。

homework1

刚开始接触面向对象的思想,其实我接受起来还是有点困难的。由于第一次作业的复杂度较低,我直接当了一main战士。这使我的代码没有任何的可拓展性,直接导致了下一次代码的重构。

类图:(emm)

思路:使用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。

原文地址:https://www.cnblogs.com/apartment-oo/p/12522648.html