BUAA OO 2021 第一单元总结

OO第一单元总结

能力有限,未能很好地融会贯通面向对象地知识,仅完成第一次作业

一、程序结构

1.类度量

总共使用三个类

MainClass类:主函数main的入口,不存在私有属性,方法仅存在公共方法main,不存在分支控制,代码规模为10行

Xiang类:存在两个私有属性

1、项的次数

2、项的系数

Xiang类的设计是从表达式基本单位考虑的,是最简单的单位项,具备对自身的求导能力和转换成字符串的功能

Poly类:存在私有属性容器Xiang类,可以用来存储表达式中的各个单位项

2.方法度量

如图所示

 

 

 其中toString系列方法中为了满足使字符串长度最短的目的,存在大量根据基本项的次数和系数的情况进行的分支控制,代码规模也较大

在suoXiang和fenXiang两个方法中,涉及到对输入的字符串进行去空格,提取符号和分项等的处理,时间复杂度较大

3.UML图

 

 4.说明

在本次作业中,从我个人面向对象的角度考虑,我将表达式作为一个类单独列出,并将其中的基本类也作为一个单独的类独自列出,表达式拥有处理字符串和添项的功能,并能够对自身进行求导,Xiang类是表达式类的基本组成单位,表达式类中求导函数和toString函数的具体完成需要借助Xiang类来实现。

同时,从我自己的角度考虑,这样的分解具有一定的耦合性,对于基本单位组成不同的表达式来说,只需要新加不同的类因子即可完成函数的迭代。

但从实际角度来说,这样的程序是失败的,因为我在完成表达式中的分项函数,其目的是得到基本组成单位时,严重依赖于字符串的结构,在第一次作业中未能对此进行良好的处理,导致后续作业中未能成功得到基本因子而导致作业失败,还是未能很好地完成从面向过程到面向对象的考虑。

二、分析自己程序的bug

  在完成第一次作业时,我遇到了符号处理不当的问题。在分析字符串的结构时,我对于项正负的判断除了位于项系数前面的符号和求导之后的变换之外,未能考虑到单独的-x存在的可能性,因为在项的规定中,-1*x前的-1是可以省略的,因此就有了-x存在的可能性,虽然我进行符号缩减时考虑到了除第一项之外的-号,但是因为第一项前面的符号我进行了单独考虑,反而漏掉了这种情况,因此导致程序存在了bug。

  bug的存在位置显然是在poly类的分项方法中,未能得到基本项的正确符号,在出现bug的此方法中,圈复杂度很高,因为要对于其前面的符号存在可能性进行判断,代码行数也较长,因此未能很好的缩减其规模,逻辑还是不够清晰,从而导致了bug的存在

三、别人程序中的bug  

  在互测中hack别人的程序时,我重要遇到了未能处理次数和系数都为大数类的bug,以及我上面所说的-x问题和未能良好解决常数项求导的问题。

  在构造互测样例时,我主要从两方面去考虑,一是作业中对于一些数据范围的设定,和表达式中对于格式的要求,例如+-+的出现等,有效性的考虑也基于此。二正是从被测试程序的数据结构去考虑,看其对于表达式的分析和数据范围的给定是怎样的,寻找其薄弱的点,进行针对hack

四、重构经历总结  

  由于未能成功完成第二、三次作业,因此重构经历有限。在完成第二次作业时,因为表达式的构成方式不同了,需要对poly类的fenXiang方法进行重构,在重构时新添加了分支控制,虽然最后失败了,但是感觉正确重构后的程序应该比重构之前的程序的规模更大,覆盖性更强,鲁棒性也更好

五、心得体会  

  pre作业与正式作业还是有很大差距的,pre作业相比于面向过程式编程的变换性不是很大,还是能够理解题目,各个作业之间的迭代关系也仅限于功能的添加,对于类的变化考虑不是很多,因此在第一单元的作业中,我未能很好的在第一次作业中去构思整个作业如何能够很好的迭代和耦合,还是带上了面向过程式的编程思维,因此需要多多练习,进一步改善,提高自己面向对象的编程能力

 

posted @ 2021-03-28 17:09  杨淇文  阅读(53)  评论(0编辑  收藏  举报