OO第一单元小结

程序分析

HW1

复杂度分析

UML图

简述

使用了poly类来解析输入字符串和数据管理和输出,数据的管理采用Hashmap形式

输出则是在poly类内重写toString()方法ifelse太多复杂度过高

存在问题

正则不熟悉

BUG&测试

本地主要采用手动样例来对大指数边界条件进行测试,强测和中测未发现BUG

在互测中同样也是凭感觉手工造了一个边界数据,hack成功一次


### HW2

复杂度分析

UML图

简述

本次代码采用四个类,其中一个主类,一个poly类管理多项式,一个Term类管理项,及一个Sim类用于化简。,这次作业没有在上一次作业的基础上把Poly和Term分成了两个部分。提取方面采用Poly提取因子,Term类用三元组管理项的方式,Term中的求导方法需要传入一个数字表示具体是对cos,sin,x中哪一项求导。则是Poly层面调用Term的求导方法,将新生成的Term存入Poly内的容器。化简采用dfs(拆项和合并项的方法)+自迭代的方法,但是由于迭代次数和dfs步长的原因T了.

存在问题

没有建立好面向对象的概念,认为框定了某些规则,限制了自己的思维,在没写dfs优化前尤为凸出dfs熔断机制没有设置好,自己估计了时间复杂度,没有去找寻一个按照时间来熔断的方法

BUG&测试

本地任然采用手工测试,进行了有关正确性的边界条件测试和关于性能的 优化测试

互测阶段任仍然是手动造了两个边界样例,hack成功2次


### HW3

复杂度分析


UML图

简述

在对于项的处理上,将其分为Fun类,Mul类,Exp类,Add类和Rec类。Fun类即为第二次作业的Term类,其余类基于二叉树和迭代下降的思想来进行的划分,分别对于*,(),+,sin/cos()[** num]四种组合,同时将它们向上造型来继承自一个Term,在Get类中进行字符串的解析和提取工作.字符串的提取采用迭代下降的方法,找到两个能合并的,合并然后将合并后的内容进行替换。

存在的问题

1.层次结构划分不清,Fun类同时承担了项、因子、表达式的功能。主要是为了减少重构量,结果捡了芝麻丢了西瓜
2.没有仔细读清题干,对于WF的形式认识不全
3.思维没有化整为零,没有将问题进行很好的解耦导致在思考过程中出现混乱

比如在思考组合方式WF问题和WA问题时,由于对称的关系,其实每次只要思考某种组合方式进行时对两侧类型进行低优先级枚举即可

4.递归下降运算顺序上存在问题

5.过度依赖评测机制,没有主动构造样例

6.WF判断与项的生成等耦合在一起,应该单独出来一个判断WF的函数,划分可能的WF情况来判断

7.字符串的提取没有考虑到自顶向下

BUG&测试

本地测试进行少量手工测试,中测上没有通过weak4、5,强测有48分



应用面向对象模式重构

在第三次作业中,我通过Term接口来统一管理了不同项,然后通过Get提取字符串和管理相关类。



心得体会

  • 多和同学沟通,不要自己一个人闷头干
  • 要积极去自主学习拓展相关内容
  • 要重视互测,积极看别人代码
posted @ 2020-03-18 18:17  duckingss  阅读(120)  评论(0编辑  收藏  举报