OO第一单元总结

第一单元总结

     第一单元作业内容结束,三次作业以求导贯穿其中,从第一次的幂函数,到第二次的三角函数、表达式,再到第三次的格式检查,三角函数的嵌套,难度逐渐上升。目前为止,我的代码仅足以完成前两次的作业,第三次仍存在因能力不足而未找出的bug,存在于三角函数的嵌套求导中。现将前两次作业的实现思路进行分析总结。

(1)基于度量分析程序结构

由于表达式的存在,因子除了可能为常量、三角函数、幂函数之外,也可能存在表达式的嵌套,因此其均作为因子父类的子类。项作为因子的集合,通过ArrayList实现;表达式作为项的集合,也同样通过动态数组实现。

以上为程各个类方法的度量值,可以看出ev(G),iv(G),v(G)值都较小,一方面是因子划分细致,另一方面也是由于未做优化。

以上为各个类的复杂度,主要集中在项和表达式的分析上,其中包含了正则表达式对字符的识别,工厂化模式得到项中每一个因子等。

作业设计思路: 将一整个表达式分解为各个项,每个项分解为各个因子,将不是表达式的因子求导,同时将求导结果与其他因子相乘,即可得结果中的一个项;对于是表达式的因子,则通过递归的方式重复上述操作,直至项中无表达式即可进行求导操作。这样,只需要对每一个最基本的因子建立求导规则即可实现作业内容。对于结果的输出,同样采取类似上述的方法。

 

(2)程序bug分析

第一次作业时由于经验不足,使用了冗长的正则表达式对表达式进行处理识别,导致忽略了每一项开始时两个的正负号处理,导致未能及时完成,后经测试修复。

第二次作业将因子细分,对于因子是表达式的,递归进行求导,采取了更加面向对象的方式,由于未进行优化,输出结果过于冗长,但也因此没有发现bug。

第三次作业在未改变第二次作业内容前提下,使用了递归下降的方式进行了格式匹配检查,但在三角函数的嵌套上出现了问题,即使是单个因子,也应当加上括号才算作格式正确,我一开始忽略了这一点,导致错误格式也能正确输出;此外,由于因子的识别仍采取之前的方式,在三角函数括号内容的识别也因此出现了bug。

(3)发现别人bug采用的策略

首先我会根据自己出现过的问题进行相应的测试;之后我会采取较复杂的表达式(三层以上的嵌套、嵌套的相乘除)进行测试;此外,我也会根据讨论区的内容予以测试。

由于精力所限,未能充分了解每一位被测者的代码结构,主要采取统一化的测试用例。

(4)重构经历

本单元作业未采取较大规模的重构,仅在第二次作业时,删去了大正则表达式匹配字符串的形式,并建立了更多因子的类,后者也是第二次作业的要求。

(5)心得体会

由于之前从未接触过java内容,寒假也并未认真预习,导致作业一开始有相当大的困难。第一次作业就未能及时完成,后通过同学帮助,自己又在作业中摸索java的语法、特点,逐渐对面向对象的编程语言有了一定的认识,这单元的作业才渐渐能有大致的实现思路。OO对我的自学能力提出了相当大的挑战,但也让我受益匪浅,无论是正则表达式匹配字符,还是递归下降解析字符串,抑或是工厂化模式建立对应的对象,都是满满的干货。在之后万不能轻视每一次作业,定要珍惜每一次提升的机会。

 

posted @ 2021-03-30 19:12  张什么来着  阅读(74)  评论(0)    收藏  举报