OO第一单元作业总结
OO第一次作业总结与反思
一、基于度量的分析
第一次作业
思路:
根据+-号我将表达式拆成项,再根据*号将项拆成因子,因子由一个指数和一个系数组成
分析:
可以看到我拆分项得到因子(catchFactors)的方法的复杂度较高,经分析是if-else分支过多
我的mian函数复杂度也比较高,原因是我将表达式拆成项的过程放在了里面,其中过多的if-else导致了复杂度较高。



第二次作业
思路:
由于加入了三角函数和表达式,于是我定义了更多的类
加法类:由幂函数的数组和表达式类的数组组成(例:\(1+1+(x+x*x*x)\))
乘法类:由幂函数的数组和表达式类的数组组成(例:\(2*2*(x+x)\))
幂函数类:一个指数,一个系数
三角函数类:继承幂函数,增加一个判断是sin或是cos的flag
表达式类:由加法类和乘法类组成(例:\((1+1+2*3*x*2)\))
分析:
之所以这样设计,是因为这样直接贴合了我们自身看表达式的方式,便于我理解
但这也导致了类与类之间相互嵌套的问题,在输出结果时,可能需要较多时间才能找到许哟啊输出的幂函数在哪里
复杂度较高的部分主要集中在输出结果和读入上,感觉是if-else过多以及递归下降太多次的问题。



第三次作业
思路:
重写幂函数类:一个指数加一个系数
重写三角函数类:增加一个因子类(是幂函数,三角函数,加法类,乘法类,表达式类的父类)
增加了很多format的判断。
分析:
整体架构根据三角函数的变化进行了更改。
由于不是根据递归下降写的format的判断,我只能一种种情况判断,导致使用了大量循环和if-else语句
以下复杂度较高的方法大多都属雨format的判断方法



二、三次作业中出现的bug
如果要一一枚举的话,bug实在是太多了,从刚写完到提交,仿佛经历了一个女娲补天的过程。我选取了几个不常见和细小的bug列举了一下
第一次作业:
第一次作业相对而言比较简单,出现的bug不多。最主要的就是我将因子的指数的类型设置为了int,这本身是符合输入的标准的。但后来为了简化输出,我选择了合并同类项,于是导致多个幂函数相加是指数超过了int的上限,于是导致了输出错误。
第二次作业:
由于第二次作业比较复杂,出现了较多的不同类型的细小的bug。
1.format error
在优化\(-1*factor\)为\(-factor\)的过程中,忘记考虑\(2*-factor\)的情况,导致出现format error。
2.不输出的错误
当出现一个项的结果为0时,我会选择不输出这个项,未考虑到如果只有一个项且其值为0的输入的输出结果。于是不幸被hack。
3.简化括号造成的错误
一开始,我认为一个表达式类,如果不是位于乘法类之间(例: \(3*(2-3)\)),即可去掉括号输出,但是由于我定义了表达式是有正负的,当表示式为负且有多项因子的时候就会造成错误。(例: \(-(2-3)\)输出为\(-2-3\))
第三次作业:
第三次作业在第二次作业的框架下基本没有改动,主要加入了format的判断。所以问题基本出现在这里。
1.漏掉了\(sin()\)这种空串的情况
2.漏掉了\(sin(+\space30)\)这种三角函数中有有符号整数中间有空格的情况
3.再次漏掉合并同类项后指数大于int上限的情况
三、发现别人程序bug所采用的策略
由于时间有限和能力不足,我并没有写自动评测机。所以在互测环节我只将我自己出现过bug的数据测了一遍,同时,参考了群里大家讨论的容易出现bug的数据进行了测试。
可以说,我几乎没有使用策略,更不用提有效性了。如果时间充裕,下次我将搭建测自动测评机测试以省去很多麻烦。
四、重构经历总结和体会
第一次作业时,我的基本因子类是由一个系数和一个指数组成的,这在第一次本身并没有什么问题。毕竟常数即为幂次为0的幂函数。
第二次作业时,出现了三角函数,由于三角函数也具有幂次,于是我将基本因子类改为系数加指数加一个判断其为x,cos或是sin的int类型的flag。
如果说前两次作业都没有什么较大的改变使我感到比较轻松的话,第三次作业就让我知道什么叫”前面偷的懒后面都是要还的“的意思了。第三次的三角函数内部出现了幂函数,表达式等。于是我不得不再次更改基础因子类,然后重写三角函数类。
体会:定义任何类之前,都要先思考其是否具有良好的可扩展性,如果没有,要如何优化。如果仅图一时之便的话,后面将多很多麻烦。
五、心得体会
1.英文不好带来的命名不规范
从我上面的图就可以看出我的命名有多不规范了。每次命名前都需要百度一下,有时候偷个懒,后面自己看的就很丑陋了,下次应该注意起来。
2.类的可扩展性差带来的连锁反应
由于写的类没有良好的可扩展性,所以每次迭代都对前面的类有不同程度的改动,写下次作业时,应该尽可能细化,确保类的可扩展性良好,避免后续重构。
3.学习搭建自动测评机
第一单元我并没有使用自动测评机,这导致我在互测环节被hack了却又无法还手的无奈,看来是时候提上写自动评测机的日程了。

浙公网安备 33010602011771号