OO第一单元总结——表达式求导
OO第一单元总结——表达式求导
第一次作业
(1) UML结构图及代码量


Main类对输入进行预处理,用正则识别出项,交给Str实现系数指数的识别产生Item,Item实现求导,Main通过hashmap实现同类项合并,各个类是非常混乱的,并没有各司其职。代码量一般。
(2) 耦合度分析


有多个方法,多个类复杂度过高,比较面向过程。
(3)难点分析
第一次作业保证输入都为合法数据,所以目前没什么难点,只需要用小正则匹配各项就好。
(4)bug分析
第一次强测无bug,也没被hack(主要是这次简单,下次……)
手测,主要会根据题意分类写测试点,然后组合。
第二次作业
(1)UML以及代码量
Checkin 类实现合法性检测和字符串预处理,Exp实现从合法表达式中解析出项,Item解析因子,Factor实现因子求导,Index,Merge实现从项的系数指数等的提取用来合并同类项,Mul实现乘法规则,Outcheck实现输出的符号化简,系数指数化简,各个类功能划分较清楚,没有混杂,但是多个类之间串行,看起来十分混乱,没有实现继承接口等,导致代码冗余。代码量较第一次显著上升
(2) 耦合度分析

![]()

复杂度较上次有了明显的下降,但是类有冗余,还是有点混乱。还是在Main实现加法规则,这一点不可取,导致主类复杂度过高。
(3) 难点分析
第二次比较第一次增加了乘法规则,并且需要合法性判断,采用大正则来实现,可想而知下次肯定还是要重构了……,化简只涉及了合并同类项,没能实现三角函数有关化简。
(4)bug分析
第二次在弱测过了以后,自己并没有在进行测试,导致强测崩了,互测崩了
竟然写出了五个bug:
采用正则合法性判断指数(不大于≠小于),忽略了绝对值为10000的情况。
脑子坏掉了,直接把 x**2 replace x*x, 导致x**234此类数据点全完。
合并后整个求导结果为0时,只考虑了合并后为一项的0输出,没考虑多个项求导均为0的输出,导致此类数据点输出为空。
采用正则判断表达式的合法性,只考虑空白字符的位置,没有考虑空白字符是否是合法字符。
在求导过程中,忽略了会产生-x从而改变项的符号。
以后一定要自己多做测试,最最重要的是要把指导书看明白,看懂指导书,看懂指导书,看懂指导书,重要的事情说三遍。
第三次作业
(1) UML结构以及代码量


Checkin实现字符串合法性判断和字符串预处理,Exp实现表达式解析出项交给Item,Item实现解析因子交个Factor,Exp Item实现了求导接口,分别实现加法和乘法法则,Factor内部求导实现链式法则,多个因子继承自factor实现了各自的求导。各个类的职责与功能更加清晰,更方便debug。但是遗憾的是除了系数和指数为1或0的化简,没有实现其他化简。代码量同第二次基本相同,一部分源于类的继承接口的使用,还因为没有实现同类项合并。其中tri类和Expf完全可以归为一类,之所以写成两个,是之前写的时候因为忽略了表达式因子的存在。
(2)耦合度分析



本次的类的复杂度有所下降,方法虽然依旧有复杂度过高现象,但是还可以忍受。总体来说,比前两次作业更加OO了。
(3) 难点分析
新增了嵌套因子使得表达式合法性判断以及表达式解析都更加困难。
对于合法性检测采用了递归下降的方法进行判断,对于项的分割采用如果搜索到非括号内的项分隔符也就是+、-在前面添加@,然后split(@)
之前字符串预处理将“**”replace“^”,对于因子的分割只需搜索到非括号内的因子分隔符也就是“*”在前面添加%,然后split(%)
(对于是否在括号中,使用一个intnum模拟栈进行标记)
完成分割就可以交给因子处理。
对于嵌套因子,去括号区分in ,out,把in交给相应的类,最后使用链式法则。
除了求导后因子系数指数的化简没能实现其他化简,或许在建立Exp,Item的时候使用hashmap可以先局部化简一下?
(4)bug分析
吸取了上次的惨痛教训,自己依旧根据题意手动构造测试点,然后组合测试。
强测没有问题,互测被hack了一下。
主要是因为表达式作为因子时,求导忘记它的符号了,导致-(-x+1)此类点错误。
这次错误原因,主要还是因为我没认真看指导书,一开始完全没看到有表达式因子,后来写完了才发现有它的存在,赶紧写了两个类,导致没有认真思考。
互测用自己构造的样例来测试,手测真的有点累……
心得与体会
通过三次的OO作业,初步掌握了继承、接口的使用以及面向对象的思维。也着实体会到了面向对象的好处(之前没看见表达式因子,之后可以直接在代码扩展,非常方便,
但还是要仔细读指导书!!!)
深刻地体会到了可扩展性,高内聚,低耦合,迭代开发的重要性,希望自己的程序越来越OO。
虽然三次作业每次都重构,但是三次重构却是程序逐渐面向对象的过程,(希望以后不要再重构了
过了弱测,一定要自己再多测试,不要抱有侥幸心理,弱测 真的 很 ……



浙公网安备 33010602011771号