BUAA-OO第一单元总结
程序结构
第一次

第一次作业的题目比较简单,可以从表达式之中归纳出统一的形式:即多项式。于是我采用了万物皆为多项式的思想,每一个因子都可以转化成多项式,这样一来,只需要实现多项式的加、乘,实现多项式的不断合并即可。对于最终得到的多项式,toString()是容易实现的。
第二次
在受到第一次作业的启发之后,以及课上研讨课、讨论区一部分同学的思想,第二次作业我依然试图归纳出表达式的统一形式,即多项式与三角函数。权且称呼这一通项为Item。这样一来,依然只需要实现Item的加、乘达到域概念上的封闭即可。不过对于这么复杂的通项,尽管是可以由嵌套容器实现加、乘的(确实很多同学实现了),但是我能力有限没干好,导致第二次作业垮台。这个时候猛然想起荣老师的提问,要是第三次作业再给你一个tan呢?
第三次

有了第二次作业的教训,第三次作业我的核心思想在于万物皆是Expr。三角函数、自定义函数、求和函数对于我而言都只是一个外壳,核心是他们之中的Expr。我给他们都设定了一个主体Expr,然后把问题转化到Expr之中来处理。
然后是一部分具体问题:
自定义函数与求和函数之中的代入问题。
- 我最初的设想是进行字符串的替换,但是一想到第三次作业的嵌套,我立刻意识到不对劲,选择额外创建了Var类,把xyzi都看做一个因子,这样一来,只需要重写equal方法,就容易实现查找替换。当然这里还涉及到深浅克隆的问题,所以我给需要的类都加上了clone()方法已实现深克隆
合并问题
- 要实现合并,需要把terms给进行排序(字符串形式),而后判断是否可以合并,这里的遍历是一个难处理点
BUG分析
第一次作业比较简单,没什么BUG
第三次作业主要在于我对于加、乘的实现上,因为我认为一切都是表达式,所以在实现时候需要给哪怕是单纯的项给套上表达式的外衣,这就使得复杂度直线上升,难以处理
策略分析
这次作业我并没有实现自动化测试,只是手动测试一些自己嵌套的测试数据,这是一个遗憾
架构设计体验:
从第一次过度到第二次的失败,深深地刺痛了我的心,开始逐渐领会到底什么是对象,什么是普适性的东西
心得体会
初学,很难,很痛苦,望坚持,加油
浙公网安备 33010602011771号