其他分享
首页 > 其他分享> > BUAA_2022_OO_Unit1_Summary

BUAA_2022_OO_Unit1_Summary

作者:互联网

目录

还没从寒假的懒散惬意中摆脱出来,OO_Unit1便迎面袭来

第一次作业分析

思路分析

我们要对一个包含加、减、乘、乘方以及括号(其中括号的深度至多为 1 层)的单变量表达式,输出恒等变形展开所有括号并化简的表达式。我的基本思路如下:

image

方法复杂度分析

image

类复杂度分析

image


Bug分析

自己的Bug分析

Hack策略和结果

\[化简易出错数据:11*x**0 + 2- +1*x**0-1*x*x+1*x**1 \]

Bug数据 Bug结果 Bug分析
(-x***2)(-1)*0 x*x 在计算(-x**2)生成-x**2没考虑负号
2 2* 出现2*x**0时没考虑因子没有幂函数部分,因此不应该有*号
(x-x)**+0 0 0**0的结果应为1

第二次作业分析

在屎山上建造一些新的房子,糟心程度可想而知。

出于懒惰,却往往不能达成目的。


新增内容

本次作业在上次的基础上增加了自定义函数,三角函数和求和函数,并且可允许括号的多层嵌套。由于我采用递归下降的处理方式,可以支持多层括号的嵌套。下面简单介绍一下我增量开发时采用的思路:

迭代思路

image

这样我们在解析到任何基本因子(除Expr外)都可以用Unit去包装,合并同类项也变的非常简单(重构已埋下根基)。

程序架构分析

类图

image

方法复杂度分析

image
image

类复杂度分析

image


Bug分析


第三次作业分析

纠结中,我选择了重构。虽然路途艰辛,但是光亮尽在前方照耀。

新增内容

于是我选择了重构。

重构历程

这是第二次作业遇到幂函数(其余同理)声明的因子:

image

第三次作作业声明则转变为:

image

可以看到不仅节省了大量的空间消耗,也使得结构更加清晰,虽然后续处理过程较为麻烦,但是我认为良好的结构层次才是我们应该学习的重点。

image

声明时对替换过最外层后形成的新表达式(sb)进行解析:

image

这样实际上我们在声明含有嵌套表达式的时候只需将最外层嵌套替换,因为声明形成的Expr在解析式会继续向下替换,直到形成最简单的表达式为止,这样非常契合我们向下递归的思路,我们不妨举个例子:

CustomFunc: f(x) = x + 1
						g(x,y) = x*y +sin(x)
  
Quote     : f(g(f(x),sum(i,1,2,x*i)))
  
init_1.   : g(f(x),sum(i,1,2,x*i)) + 1
init_2.   : f(x)*sum(i,1,2,x*i)) + sin(f(x)) + 1
init_3.   : (x + 1)*(1*x + 2*x) + sin((x + 1)) + 1

经过递归下降便可生成最终的表达式 (x + 1)*(1*x + 2*x) + sin((x + 1)) + 1,此过程结构清晰,毫无循环替换的狼狈姿态。

image

通过这种方式构建化简表达式树,逻辑清晰,可阅读性强(更可能被人观赏(bushi~)。

至此,重构完成!

程序架构分析

类图

image

方法复杂度分析

image

image

image

类复杂度分析

image

Bug分析

Bug数据 Bug结果 Bug分析
sum(i,2147483648,2147483649,i) Exception sum上下界没考虑到BigIneger范围
((x**2)**3)**2 2*x x**12在处理时发现“*1”时直接用“”替换

心得体会

本单元作业最大的收获是对于 Java 的了解更加深入了,包括各种类库的使用方法、工厂模式层次化编程、面向对象程序架构设计理念。另一个重要的收获就是对于递归下降算法的深入理解。递归下降的理念非常简单,实现非常巧妙,而功能强大。

除此之外,迭代、重构是这一单元的主题,一个好的架构可以起到事半功倍的效果。为了偷懒,往往达不到目的。第二次作业由于仍选择在架构较差的第一次作业基础上添砖加瓦,导致给第三次大重构带来了不小的压力和挑战。我认为重构也是一种智慧,智者说:“实践出真知。”我经历了大重构,方可知晓重构前后的构建差距、性能优劣、拓展性强弱,在对比中择优,并加深对优秀架构的理解。

自动评测机的编写以及边界数据的构造也是第一单元测试不可或缺的部分,它们不仅能找到自己的程序中的 bug,还能帮助屋子里的小伙伴一起debug。

第一单元是我初次接触面向对象编程,学到了很多新知识,但仍存在很多不足。不过细想,尽管遇到这么大的困难,我仍然不卑不亢的走了下来,虽然无法尽其美,但也在光辉三月中播撒了珍重的汗水,收获了艳丽的阳光。

标签:OO,复杂度,BUAA,sin,因子,Unit,Unit1,Bug,表达式
来源: https://www.cnblogs.com/darkerbraeker/p/16057502.html