OO第一单元感悟与体会

第一单元的三次编程作业结束了,现在分享一些我对自己作业的分析和感想

1.程序结构的分析

第一次作业:

 

 

 

 

 

 本次作业我的主要思路是,为每一项写一个正则表达式,在输入的字符串中匹配每一项,多项式类中保存着一个单项类的列表,这样来完成求导并不难,完成多项式中项的排序工作后,合并同类项也不难。

第二次作业:

 

 

 

 

 

 我的第二次作业是基于第一次作业做了一些小的修改,每个项中新增了sin(x)的次数和cos(x)的次数两个属性,对单项的求导结果返回一个包含三个新项的列表,大体与第一次作业类似。只不过优化过程中思路有些混乱,当然这并不会影响对错,只是会影响一部分性能分。

第三次作业:

 

 

 

 由于我的前两次作业的结构难以适应第三次作业的嵌套结构,所以第三次作业必须重构。在ddl一直逼近的压力之下,我选择了类似二叉树的结构存储多项式,但是没有为各种运算都创建一个类,只是在节点中存储了“+”、“*”、“sin”等字符串来判断运算种类,也并没有类的继承关系,因此出现了非常冗长的类,这显然是一种非常不好的构造。如果当时我能多静下心来思考一下,为每种运算创建一个类,共同满足一个父类或接口,结构会好很多,在以后求导和debug中也能轻松很多。

2.程序的bug分析

第一次作业并没有被发现bug。

第二次作业很多沿用了第一次的内容,由于读指导书的疏忽在,判断格式时将所有\s(所有空白字符)替换了,而题目中只有\t和空格是合法的空白字符,因此有一种格式错误不能发现,在强测中错了一个测试点。

第三次作业我写的太过混乱,在解析字符串的时候出现了一些错误,例如对于括号的处理时没有考虑到这种类似于(x)*(x)这样最开始的括号的另一部分没有在最结尾,从而产生了bug。

3.发现别人bug采用的策略

第一次作业我并没有成功发现别人的bug。

第二次作业我觉得有些人可能在优化时产生错误,因此我故意构造了一些包括sin(x)**2+cos(x)**2以及包括sin(x)**4-cos(x)**4的样例,发现了别人的一些bug。

第三次作业我故意写了一些括号嵌套情况复杂的测试数据,成功找到了别人的bug,此外利用次数绝对值不超过50的要求,我构造了sin(x)**2*sin(x)**49这样的数据,也让一部分人输出了WRONG FORMAT。

4.应用对象创建模式

三次作业中我都设计了包括了解析字符串,求导,输出的PolyComputer类,暂时还没有使用工厂模式。

5.对比和心得体会

我觉得前两次作业用我的方法写比较便捷,但是这种方法不适应第三次的嵌套结构,也让我在设计第三次作业时遇到了极大的困难,最后程序结构很混乱。现在反思过来,应该在第三次作业中多使用接口继承等工具,能让自己的代码更清晰,也有利于更改和调试。此外,我觉得以后的作业中我应考虑使用工厂模式,来改善自己的代码。

 

posted @ 2020-03-21 13:16  °不凉少年  阅读(152)  评论(0编辑  收藏  举报