BUAAOO第一单元代码分析

1.HomeWork1

思路

  • 一个主类用于字符串得操作,
  • 一个Poly类用于对一个多项式进行抽象,用Arraylist来对term进行封装.内部含有求导方法,添加并合并同类项的方法,toString方法,
  • 最后一个是term类,对每一个幂函数进行抽象.内部含有求导方法, tostring方法,equals方法.

不足之处及bug分析

  • 没有按照运算进行分类,对以后的扩展产生了很大的影响.
  • 在强测和互测中出现了正则爆栈的问题,主要是因为本次没有要求检查wrongformat,但是还是使用了大正则的方法对wrongformat作了检测.

类图

BUAAOO第一单元代码分析_第1张图片

度量分析

BUAAOO第一单元代码分析_第2张图片

2.HomeWork2

思路

  • 本次作业基于上一次的作业有了sin和cos,对每一项的抽象都可以用一个a*xb*sin(x)c*cos(x)**d 来抽象,所以可以抽象出三个层次,一个表达式由若干个项相加组成,项由若干个因子相乘组成.因子中还有type和parameter两个属性,这样就可以用一个因子来实现对常数,幂函数,三角函数的抽象

不足之处及bug分析

  • 这样的架构对于求导操作也是比较快的,但是在拓展性上,还是存在一定问题,导致第三次作业直接进行了重构.

类图

BUAAOO第一单元代码分析_第3张图片

度量分析

BUAAOO第一单元代码分析_第4张图片

3.HomeWork3

思路和感想

  • 本次作业与前两次作业有了很大的区别,多了嵌套,一个项不能再简单的由几个固定的因子来表示了.本来是打算在之前的方法上继续扩展,但是在对equals方法, hashcode方法,clones方法以及多层引用的嵌套,都很难写.导致最后放弃了在原有的程序上扩展的方法,使用了ppt中的按项与组合项的分类方法进行重构.
  • 思路是基础项和组合项,且都继承自项这个类,然后用项这个类进行建树.抽象好层次关系以后求导操作就是比较简单的了,只需要对每个基础项和组合项进行求导即可,化简,求导等也只需要对这几个类进行即可.
  • 难点主要还是wrongformat的检测,表达式的处理以及表达式的化简.而且化简还需要考虑性能问题.

不足之处及bug分析

  • 这次作业没有处理好wrongformat的问题,以为没有问题,实际上有大问题.导致强测错了很多,修复的时候会需要大问题.然后优化也有很多地方出现了很多的问题.

类图

BUAAOO第一单元代码分析_第5张图片

度量分析

BUAAOO第一单元代码分析_第6张图片

测试

  • 在前两次中,测试数据是使用python和正则表达式来随机生成的,在第三次中没有办法直接使用正则表达式来生成,于是又使用了递归加随机数的思想来生成数据

  • 这里附上第三次作业的源码

  • 随机生成的数据的不足之处:

         1. 对一些特定的边界的检测没有办法检测
         2. 对wrongformat没有办法

  • 当然随机数据在互测阶段是非常好使的一种策略,可以很快的检测程序有没有bug.

你可能感兴趣的:(BUAAOO第一单元代码分析)