BUAA 2022 OO 第一单元作业

一.作业架构分析

   第一单元让我理解到了面对对象中对象的含义,在一开始就无脑用类似数据结构的写法来完成作业是很奇怪的,知道写完这几次作业,才渐渐地明白对象的含义。我们要做的就是突破括号的阻碍,提取出表达式中的项和因子,分门别类地将每一部分存储起来,最终进行输出,面向对象编程在进行前要有清晰的思路,认识到要完成的任务中的对象是什么。接下来具体分析这几次作业的内容。

1.第一次作业

(1)因为对Java并不熟悉,以为自己偷懒,第一次作业的完成还是很费劲的,结合上机提供的代码,有了一点思路。

首先是建Expr\Term\Factor这三个类来进行存储Lexer读取然后经Parser分析出的出的内容,最终在每一个类中进行输出即可。

(2)UML图

   

 

 

(3)类复杂度分析

 

 

 

这里的类复杂度和其他同学比起来还是很高的,感觉是对Java的一些操作并不熟悉,完成一个目标可能是用很复杂的方法,这就需要我自己的额外联系来改进了。

(4)方法圈复杂度分析

 

 

最主要的是在于Expr里面对于因子相乘组成项,再将项相加进行输出,所以这一部分的复杂度跟高一些。这个处理思路还是从别的同学那里学来的,感觉比我自己所设计的复杂度已经低了很多了,感觉还是要多和别人交流,能够学到很多不一样的方法,写的程序也能够更加轻量。

  1. 第二次作业

(1) 这一部分作业完成的不好,使用的是预解析模式,但是在三角函数化简部分除了比较大的问题,单纯认为三角函数的内容没有数字,具体的一般模式思路在第三次中体现。

(2) UML图

 

 

(3) 类复杂度分析

 

(4) 方法圈复杂度分析

 

3.第三次作业

(1)第二次作业中变化为加入了三角函数和自定义函数,所以在化简得时候不再是简单的进行表达式的读取,解决方法是再分别新建三角函数类和自定义函数类,分别都是Factor的引用,这几个特殊的类都返回一个因子,就类似于第一次作业中的Expr的作用,在简化部分,在每一项中,定义符号,系数,和几个不同的因子,包括x,sin和cos,同时记录他们的系数,同时在这个项中建立一个HashMap,分别存储因子的内容和系数,记录这个项的特征,在Expr层面则是建立一个HashMap,分别存储每一个项的特征和这个项,以便将系数进行合并。

  第三次作业相对于第二次作业,增加了更多的嵌套层次,主要是要设计好每一种因子的读取,由内而外进行对表达式的处理,同时要注意三角函数内的内容的最终输出形式。

(2)UML图

    

 

(3)类复杂度分析

 

 

(4)方法圈复杂度分析

二.BUG分析

   在第一次作业中,存在的是没有完全理解指导书,在项里面没有将每一个因子的符号提出来拿到项的最前端,应该是在输出前,便利每一个因子,记录符号,最后输出符号和每一个因子的内容

   在第二次作业中,出现两个问题。第一个是因为使用了HashMap,但未考虑深浅拷贝的问题,由于第二次是使用的预解析模式,导致在处理某个f表达式时,改变了其存储的内容,借这个机会逼迫自己学习了深浅拷贝的方法。第二个是考虑不全面,在三角函数化简时,未考虑其内容存在不一样的数字,在中测是没发现这个问题,最后用HashMap存储不一样的三角函数因子解决化简问题。

在第三次作业中,主要的问题在于函数嵌套引用,和Sum类型的上下限存储问题。函数嵌套引用在程序里实现的不精简,导致嵌套层数较多时出现未考虑到的问题。对于Sum类型的求和函数,应用BigInteger来存储其内容,这是考虑不全面造成的。

三.心得体会

  首先是觉得每一次作业的难度是不小的,仅仅靠自己的力量还不足以较为完善的完成每一次作业。在接下来的其他单元当中,应该是多与他人交流,尽可能地优化自己的程序

  而且,在每次做作业之前,应该准备充足,思考一个完善的架构,找到对象价值的体现之处,使一个架构具有足够的抽象性,适应更多的情况,每一个类之间要有充足必要的联系,使代码更加的顽强。

  希望在接下来的单元学习当中,能够沉下心来认真思考,再这样划水下去,可能就要和OO再打半学期的交道了。

posted @ 2022-03-26 00:08  徐俊响  阅读(47)  评论(1编辑  收藏  举报