学不会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造成了一定的困难和压力。在讨论区许多同学展示了评测的设计思路,我也需要学习。
总之,这门课的学习上我个人基础可能不是很好,所以我需要更努力的学习争取能够完成大部分作业的训练,在这过程中提高自己设计和测试的能力。