OO第一单元总结

OO第一单元总结

第一次作业

UML类图

架构设计

​ 第一次作业采用了递归下降的方法,将表达式Expr拆成项Term,Term可以拆成带指数的项Basic,Basic由各种因子组成。借用第一次训练的思路,由Lexer与Parser解析表达式。定义了Factor接口,表达式因子、常数因子和变量因子实现这个接口,即Expr类、Constant类和Variable类。最终把表达式传入Item类,在Item中进行运算与合并输出最终结果。

发现的BUG

​ 对连续的正负号处理时出现BUG,将运算的正负号当作前置正负号处理掉了,导致计算时缺少运算符号。

优缺点分析

​ 本次作业我的代码的优点是条理较为清晰,缺点是在进行运算时没有处理好两个括号内的项相乘的情况,导致中测没有通过。

第二、三次作业

UML类图

复杂度分析

类复杂度分析:

方法复杂度分析:

​ 可以看出,Item类和Lexer类复杂度较高,因为大部分对表达式的预处理都塞进了Lexer类中,而最终的合并与计算塞到了Item类的result方法中。

架构设计

​ 保持之前的架构不变,因子类中加入Sin类和Cos类,添加SelfDefineFun类处理输入的自定义函数,MainClass中加入replaceSum方法对sum函数进行替换。

发现的BUG

​ 对于sum函数以及自定义函数只是进行了直接的字符串替换,导致出现很多问题,在处理自定义函数时没有考虑x、y、z的顺序问题,最终没有通过中测。对三角函数的处理上应当在解析时没有单独设置一个类来处理三角函数,导致第三次作业三角函数内部无法化简,并且处理指数项展开时计算出错,导致没有通过第三次的中测。

优缺点分析

​ 优点是结构比较清晰,不需要重构直接进行迭代,对表达式的解析不易出错。缺点是由于对各种JAVA容器的不熟悉,导致最终表达式计算时代码混乱,得不出想要的结果,对三角函数的化简也没有做到位。第二次作业的bug累积起来导致第三次作业也没有通过。

总结与心得体会

​ 第一单元的三次作业对我的影响还是挺大的。做第一次作业时我就感觉比pre的难度上了一个档次。向第二次作业迭代时也是同样的感觉。根本原因一是对java的不熟悉,之前从来没有接触过,对各种语法各种容器的方法完全不知道也不会使用,这样的不熟悉在做了pre之后稍微减轻了一些,但是在第二次作业时选择合适的容器来存储数据又成为了一个问题。二是没有转换到面向对象的思路上面来,还是有着面向过程的想法,导致一个类一个方法冗长混乱,出现不知从哪里来的BUG。

​ 第一次训练的代码给我提供了三次作业最基本的框架思路,让我在前期解析处理表达式的时候得心应手。但我将表达式处理为后缀表达式之后却失去了思路,总是纠结选择什么容器,但是仍然没有做出来。对于指导书的理解也是不够透彻,经常发现指导书中被我忽略的某些部分就是这个BUG的产生原因。这对我的信心是一次比较大的打击。助教和同学的帮助让我改掉了很多BUG,但是我对面向对象的理解太浅显,导致我没有很好的方法去处理出现的BUG,不知道是我的架构出了问题还是JAVA的方法用的不对。

​ 经历了三次作业的失败,虽然感受了些许的气馁,但是我认为我还没有放弃,或者说不该放弃。在失败中我也学到了很多知识,对代码的迭代与重构中让我快速学习了很多java的方法与语法,让我学会了使用接口与继承,明白了好的架构的重要性,学会了提取方法防止方法过长等等。第一次的失败让我的态度变得有些消极,但是经过了反思,我对后面的学习充满了动力,我想要克服自己的懒惰与消沉,弥补自己的不足,在后面的学习中重新站起来,至少有能力进入互测中。回顾pre的内容,加深对java的学习,以及对下一单元的提前预习是我这两周的重点。努力终有回报,向着第二单元前进吧!

posted @ 2022-03-26 13:45  JcDt  阅读(24)  评论(0编辑  收藏  举报