OO第一单元总结

一、程序结构

DIT NOC RFC LCOM CBO WMC
Main 1 0 ≈12 0 3 7
Pre 1 0 ≈3 0 0 2
Factor 0 5 0 0 0 0
Number 1 0 ≈5 1 1 0
Var 1 0 ≈8 0 1 5
Exp 1 0 ≈10 0 4 9
Expr 1 0 ≈15 0 3 18
Term 1 0 ≈20 0 5 20
Parser 1 0 ≈25 0 7 30
Poly 1 0 ≈10 0 3 5

优点:可拓展性强,方便添加结构逻辑等

缺点:部分逻辑混乱,有点地方互相引用没有缓存导致运行速度不快。同时对于优化的逻辑十分简单没有过多考虑。

二、架构设计体验

每次迭代均进行了重构,第一次采用AST树,通过抽象类来表示因子的方式来进行运算简化,第二次使用hashmap储存因子,第三次再次使用抽象类来储存因子,每次迭代的变化都比较大。但每次重构需要改动的都只有与因子相关的节点,对于文本解析器基本都没有改动。每次重构的出发点都是为了使运算逻辑或者存储逻辑更加简洁清晰,采用的运算方法都一样,改变的只有关于如何表示因子、项与表达式的方式。

三、自己程序的bug

第二次程序的BUG有两个,一是exp在部分情况下括号内的不是因子,即出现exp(expr)(应该是exp((expr))),原因为对exp内是否因子判断错误,采用正则表达式判断如果有(与)就分类为因子,忽视了exp(A)+exp(B)的情况;二选择因子没有短路判断,导致不必要的计算。一的解决方法为使用for循环遍历确认为因子,二添加跳过因子的方法并应用与解析选择因子的方法中。 第三次有一个BUG,就是关于exp多次嵌套的问题,错误原因是项的tostring方法中判断因子是否等于1时调用了一次化简方法但并未缓存,后面生成字符串时再次调用了化简方法导致TLE。

四、自己发现别人程序bug所采用的策略

1,排列组合所有嵌套情况如函数嵌套选择因子,选择因子嵌套函数,通过自己刻意制造多种可能导致错误输出的错误来发现BUG。2,采用评测机大规模生成随机测试数据。

五、自己进行的优化

为了确保输出的正确性,我只进行了正项提前的优化,在表达式的toString中通过正负对项进行分类随后先输出正再负。

六、大模型相关使用

我基本都使用了AI,我会先按照自己想法完成一次,然后让AI去DEBUG。大模型能基本完成要求,但会因为我自己完成的代码本身有缺陷而生成有缺陷的代码。互测房中大部分同学也是用了AI帮助的代码,因为都有AI注释。

七、心得体会

对我来说难度集中理解Parsre原理上,由于很久都没有编程过,所以生疏了许多,对AI依赖性较强,对于一些AI来DEBUG的地方没有细看,只是确认了其能完成任务,总觉得自己有些地方没有真正理解到或者学懂,故以为自己在今后的学习中应该逐步减少对AI的依赖,我认为可以用AI来DEBUG,但不应该让AI来“一键完成作业”这样会丧失学习的意义。

八、未来方向

第一次作业多一点提示与引导,帮助同学顺利过渡。