学不会OO的第一单元反思

  第一单元作业比较菜orz前面分析一二次作业,后面对未完成的第三次作业单独进行总结反思

一、程序结构分析

第一次作业:

  第一次作业基本思路是,对其进行求导,然后进行排序后合并同指数项,最后输出。

  空格可以先直接消去,然后将++或--这种替换成单一运算符方便捕获处理。

  类图:

  代码行数:

 

第二次作业:

  第二次作业加入了sin和cos,变得复杂了起来。这里采用了function来存放下面三种情况(sin cos x) MainClass提供了Poly类的初始化以及CalculatePoly类的初始化及调用,CalculatePoly中提供了字符串输入及预处理以及求导调用。Poly类提供了map来保存所捕获的项及详细的求导方法。

  类图:

 

 代码行数:

二、bug分析

第一次作业:当出现正负抵消的时候会出现没有输出的情况。

  解决方案:在输出处设计一个标记flag,当未输出的时候进入条件输出0并结束

第二次作业:当指数出现前导0会误判WF,输入10000会判成WF,当输入中存在垂直制表符没有报WF

  解决方案:修改正则,一个是在原有的指数部分增加前导零,一个是单独判断10000和\d{1,4},最后一个bug是将\s改成了{ \t}

三、互测策略

  由于没有搭建评测机, 互测采用的是人力测试法(

  基本思路是首先测试自己出现错误的地方,然后检查边界数据。

四、应用对象创建模式

  主要是在第二次实验,使用了工厂模式进行继承。由于工厂模式依赖于接口,把具体产品的实例化工作交由实现类完成,扩展性比较好。也就是说,当需要系统有比较好的扩展性时,可以考虑工厂模式,不同的产品用不同的实现工厂来组装。所以在这个单元可以采用简单工厂模式,即由一个工厂对象根据收到的消息决定要创建的类的对象实例,提供工厂类、产品接口和产品类。这个思路也最终应用在第三次作业中

五、第三次作业反思

  第三次作业我完成的部分是对于各个组分的类以及其求导方法,在这里使用了第二次实验学习的工厂模式的方法,首先建立Tri抽象类,随后让各个组分的类继承自Tri类,使得代码调用更加清晰,同时应该可以方便之后的处理。

  主要遇到的问题是对于嵌套结构的分离捕获。一方面ds时表达式树掌握的不够熟练,另一方面在正则构筑的时候由于正则较为复杂于是没能绕出去orz。最后看了关于词法句法的问题,但是没有完成实现(而且应该是不必要的)。

六、心得体会

   这门课给我的感觉就是累。为了完成作业,需要学习许多东西,同时每次作业的时间也较为紧张,需要投入大量的时间。

  第一单元大体上讲的还是面向对象的基础,包括接口、继承、多态等等。我现在对于他们的使用自己认为还不够熟练,争取在以后的训练中继续练习巩固吧。

  另一方面,第一单元我应该是少有的没有搭建对拍器。这对于自己理解bug找到bug造成了一定的困难和压力。在讨论区许多同学展示了评测的设计思路,我也需要学习。

  总之,这门课的学习上我个人基础可能不是很好,所以我需要更努力的学习争取能够完成大部分作业的训练,在这过程中提高自己设计和测试的能力。

原文地址:https://www.cnblogs.com/kongyou/p/12518000.html