BUAA-OO-第一单元总结
OO课程第一单元马上就要过去了,我也经历了连续三周魔鬼作业的考验。对于我这样没有任何面向对象思想的小白来说,每次作业都是十分痛苦且艰难的。首先很高兴自己三次作业都拿到了还不错的成绩,但高兴之余我也发现了很大问题:我的代码一点也不OO,我仍然在用C语言的面向过程思想去写代码。这是我急需改变的编程思想。
第一次作业
第一次作业我的基本思路是:
1、判断非法空白字符是否存在,如果没有非法空白字符,就删掉所有空白字符(空格和 )。(简化正则表达式)
2、使用lookingAt()函数去匹配第一项是否合法,如果合法就删掉第一项,继续循环判断,直到str为空。(避免大正则暴栈)
3、根据特定+-号的位置将表达式拆分开,并根据拆分的格式将系数和指数存在两个ArrayList数组中。
4、根据系数和指数进行求导操作,并进行一些合并和化简。
一共有两个类,第一个类为主函数类,只有一个方法,20行。第二个类为多项式类,其中有6个方法,分别为删空格、匹配合法、拆项、计算、输出、返回是否合法。每个方法大概在30-40行,共190行。每个方法的控制分支数目较多,因为要匹配各种不同情况,所以if else嵌套比较多。
在强测和互测中幸运地没有bug,共发现别人2个bug,没有特别构造数据,用暴栈和特殊字符hack了2个人。
第二次作业
第二次的做法基本同第一次,只不过存指数的数组多了几个,合法条件的判断多了不少。
一共有三个类,第一个类为主函数类,只有一个方法,13行。第二个类为多项式类,有9个方法,其中4个分别为构造函数、匹配合法、拆项、存储指数系数,另外5个分别为不同形式项存储系数的具体方法。每个方法大概在20-30行,共210行;第三个类为求导运算类,有3个方法,分别为构造函数、优化、输出。每个方法大概在40-50行,共140行。其中有个别方法涉及到的控制分支数目比较多,各种if else。
在强测发现了两个bug,是在化简时考虑不周全导致。发现别人3个bug,有根据正则的漏洞构造特定数据。
第三次作业
第三次作业我的基本思路是:
1、判断非法空白字符是否存在,如果没有非法空白字符,就删掉所有空白字符(空格和 )。(同第一次)
2、根据不在括号内的+-号将表达式拆分成项
3、根据不在括号内的*号将项拆分成因子
4、判断因子是否合法,如果合法则根据因子形式进行求导运算,如果是表达式因子,则去掉最外层括号后再次进行2,3两步
共五个类,第一个为主函数类,一个方法,50行;第二个为表达式类,2个方法,共50行;第三个为因子类,2个方法,共55行;第四个为求导计算类,有10个类,为各种情况的求导计算以及判断是否为表达式因子,共230行。第五个类为优化类,一个方法,主要进行优化操作,共40行。其中个别方法涉及到的控制分支数目较多。
幸运地在强测和互测没有bug,但优化并没有做得很好,性能分完全没有拿到。共发现别人1个bug,是根据正则表达式的漏洞构造特定数据的。
总结一下第一单元的作业,首先很开心自己都取得了不错的成绩,但最大的问题还是不能够面向对象,仍然在用面向过程的思路去做作业。之前还是觉得这几次作业对象构造不是很清晰,不能很好的找到对象之间的关系,从而接口、继承这样的操作也没有用到。在听了大牛们的分享之后,大致对这次作业的对象构造有了思路,可以大致的分为表达式类、多项式类、因子类这样,并在每个类里重写或继承一些判断或者计算方法,这样才是面向对象的思想。所以在今后的作业中,仍然需要锻炼自己面向对象的思想,比如第二次试验的员工工资问题,就很好的能够体现出面向对象思想,希望有更多机会练习这样的题,这样才能更好的培养起面向对象思想。