OO第一单元总结

一、基于度量的程序结构分析

(1)第一次作业

OO第一单元总结_第1张图片

 

  第一次作业对面向对象的理解还不够,总体分成了三个类,分别是包含主函数的Diff,处理字符串的InputChecker和进行求导的Calculate。因为对正则表达式不够熟悉还不能熟练运用,本次作业采用了状态机的进行字符串处理。采用状态机的优点在于思路较为清晰,也比较简单,容易想到,但缺点是大量的case语句导致一个方法内的代码过长,代码风格不佳。

(2)第二次作业

OO第一单元总结_第2张图片

 

  第二次作业加入了三角函数,由于第一次仅包含简单幂函数的情况下下使用状态机已经使代码过于长,第二次作业我选择对代码进行重构,使用正则表达式对输入进行判断与拆分,使得对输入的处理变得简洁了一些,但是对类的划分依旧是主函数,输入处理与求导计算三个类。

  优点:正则表达式的使用使得对输入字符串的处理更加清晰。

  缺点:对类理解与划分不够深入,也没有运用继承。

(3)第三次作业

OO第一单元总结_第3张图片

 

  开始写第三次作业之前学习了继承的相关内容,在真正动手写代码前花了很长时间思考整体的架构,最终写出了如上结构的程序。对所有表达式构建了一个名为Item的父类,再根据具体表达式的形式分为常数Constant、幂函数PowerFunction、两表达式相加构成的表达式Add、嵌套的三角函数TP等6个子类,在子类中根据其自身形式对求导方法进行重写。在InputHandler类中对输入进行处理,先在字符串中识别因子,再对判断将因子合为表达式,再逐层将表达式合为表达式,最后合成一个最大的表达式,通过调用Item类中的求导方法进行求导,得到最后结果。

  优点:通过继承使得各个类变得简洁,求导也更加简便。

  缺点:没有进行化简。

 

二、Bug分析

(1)第一次作业

  表达式判断有误。

(2)第二次作业

  输入合法性判断有误,如+++ 1等情况没有识别出非法输入,对guidebook的理解有误再加上正则表达式写得不够细致导致的错误。

(3)第三次作业

  未通过强测,输入合法性判断有误,对于可嵌套的表达式第一项有正负号的情况判断错误给出Wrong Format,此外对表达式的求导也有错误。

 

三、发现别人Bug所采用的策略

  主要查看正则表达式部分的代码,分析其未考虑到的非法输入内容,再加上自行构建较为复杂的表达式进行测试。

 

四、Applying Creational Pattern

  因为初次接触面向对象,对程序的结构理解完全不够,导致三次作业几乎都是推翻重写,第一次状态机,第二次正则,第三次继承,只有判断前对输入的空格的合法判断以及判断完成后消除空格的部分在后续中有继续使用。

你可能感兴趣的:(OO第一单元总结)