OO第一次博客作业

第一次作业

  第一次作业要求我们进行简单幂函数的求导,我采用的方法是每项单独匹配,匹配完处理系数和指数放入两个动态数组且数组地址相同,在此过程中因为第一项可能无符号进行特判。第一次的优化通过指数相同系数相加,和如若有加号放在首位可省略两种情况。

  第一次作业因为才开始接触java以及oo所使用的基本都是面向过程,一共两个类,其中一个把主方法写了几百行,完全不符合面向对象的思想。

(1)基于度量来分析自己的程序结构

 

   本次作业由于第一次接触oo以及java,所有内容基本在一个方法中完成,看起来十分臃肿且没有复用性。一个方法469行,完全是面向过程在打,而且部分可以变成方法复用的地方也没有提出来,而是直接在一个方法中处理了,整体呈现出高内聚高耦合的情况。

 类图

 

优点:看起来真的简单

缺点:点开polynomial看看真的繁琐,没有任何面向对象的体现。

(2)分析自己程序的bug

  自己测试自己时,主要手打一些边界数据进行测试,但是个人所想不是很全,所以在互测时仍有错误。

  对于/v没有进行特判,同时对于空串理解错误错认tab不是空串。此外,首先处理++ 1这种数据时正则判断错误。对于正则的使用不够熟练,只会使用m.find进行匹配。

(3)分析自己发现别人程序bug所采用的策略

  第一次作业基本采用纯手写边界数据进行盲测,所幸第一次能看到hack数,所以只对于被hack的人进行测试,并没有做特别多的无用功。大佬真多,看代码主要是学习。

第二次作业

  第二次作业在第一次作业的基础上加上了sin和cos进行求导,我采用的方法是按项匹配正则表达式,把匹配好的项放入Number类,每一个项实例一个指数和系数的对象,如果此项没有对应的对象则对应指数为0,系数为1.然后进入求导类,求导根据项最长可能即所有都有进行求导,对于求导后的式子进行系数指数优化,然后对于sin^2+cos^2进行一系列的优化。

  这里的优化主要有sin^2+cos^2=1,a*sin^2+b*cos^2=a+(b-a)cos^2,1-sin^2=cos^2等一系列针对此项可以优化的地方进行局部优化,并把第一个加号项提到最前面。

(1)基于度量来分析自己的程序结构

  相比于第一次,这次的风格好了很多,部分代码可以说用了面向对象的思想,虽然这个代码在第三次作业仍然没有能够复用,但这种模块化的思想,确实为这次缩减了代码量。但是类中返回值时创建了很多无用的方法,需要改进。仍然没有做到高内聚低耦合。

类图

优点:每一块条理清晰,便于查找和修改

缺点:Polyprocess中有一些方法可以变成类,方便于以后使用。

(2)分析自己程序的bug

  自己测试自己时,主要手打一些边界数据进行测试,但是个人所想不是很全,所以在互测时仍有错误。

  首项前可能有空格没有考虑,优化部分sin和cos指数优化打错了。

(3)分析自己发现别人程序bug所采用的策略

  第二次作业基本采用纯手写边界数据进行盲测,因为之前自己有打一些测试数据,就用这些数据hack了6个人。看了部分代码进行测试。

第三次作业

  第三次作业难度比之前上升了一大节,其要在sin或cos中完成因子嵌套,因此之前的方法在这里是不适用的。我所采用的办法是递归下降,前期对于数据进行一系列的预处理,判断WF的情况,然后尽可能的删去+号,只保留区分项所必须的。然后把所有的+、*号变成a、m,每次递归把括号外层换回,并进入该层的项的求导,根据+分割项,根据*分割因子,并由内到外递归求导,整合为字符串。最后化简部分我只进行了一些简单的处理,对于合并以及特殊sin、cos没有进行处理。

(1)基于度量来分析自己的程序结构

  这次作业和第二次差不多,许多可以变成类的方法我都放在一起写了,虽然看起来简单但对于以后的使用造成了一定的麻烦。依然难摆脱低内聚高耦合,虽然与上次相比内聚有了一定的进步,但仍然需要继续学习面向对象的思想,尽可能做到分类。

类图

优点:每一块条理清晰,便于查找和修改

缺点:Formula中有一些方法可以变成类。

(2)分析自己程序的bug

  自己测试自己时,主要手打一些边界数据进行测试,但是个人所想不是很全,所以在互测时仍有错误。

  sin、cos()内+1情况没有考虑,a没有替换。此外,*-1负号没有考虑,读系数没有读进去。

(3)分析自己发现别人程序bug所采用的策略

  第三次作业学会使用对拍器和批量处理,虽然还是不会生成代码,但一下子测六七个的感觉还是比之前好了很多。主要手打边界数据进行测试。没有结合被测程序设计测试样例。

  (4)  Applying Creational Pattern

  三次作业都没有使用设计模式,我觉得第三次作业求导部分可以变成一个工厂模式,因为有共同的功能一致的方法,实现低耦合。

  重构的话,我觉得我将会把一些不依托特定数据的方法变成类,外部使用try和catch捕获异常。

posted @ 2019-03-26 21:32  碎光123  阅读(140)  评论(0编辑  收藏  举报