第一单元实验博客

一、程序结构分析

第一次作业:

  第一次作业基本思路是,用set储存单项式,相同的单项式在输入时就合并。每个单项式各自求导,然后放到一个新的set中就得到了一个新的多项式,然后输出。

  类图:

  代码行数:

 

第二次作业:

  第二次作业加入了sin和cos,变得复杂了起来。定义三个子类,sin,cos,幂函数。每个项都由一个sin,一个cos,一个幂函数组成。正则表达式整体匹配来检查格式错误,缺点使可能爆栈。

  类图:

   代码行数:

 

 

第三次作业:

  第三次作业中,对于每个因子都建立类,每个计算方法都建立类,以树的形式组织起表达式。

  采用分段匹配,对于每一个表达式中的项匹配完成后,把对应部分从表达式中删除。

  类图:

 

代码行数:

二、bug分析

第一次作业:没有bug

第二次作业:当系数为1时,项与项之间会缺少加减号。合并sin(x)**2+cos(x)**2=1时会出现合并错同类项的状况。

  解决方式:在每个项的toString中把系数唯一的情况加上“+”号。合并同类项错误是因为把两个功能不同但是名字相似的方法弄混了,改回了就好了。

第三次作业没有考虑到sin(x)内部可能是0的情况,导致这种情况下无法输出。

  解决方式:在一个常数为0是,它的toString方法会返回空串,在嵌套类中捕捉是空串的情况,在对应位置补充上0

三、发现别人bug的策略

  第二次作业用Python生成测试数据进行测试。

  第三次作业由于不知道怎么用正则表达式生成测试数据,人工进行的测试。

  基本思路是首先测试自己出现错误的地方,然后检查特殊的输入。但是效果不是太好,我觉得主要原因是读代码的能力还需要多锻炼。

四、应用对象创建模式

  在第一次第二次作业尝试使用工厂模式,但是并不成功,主要是前两次任务相对简单,只用一个工厂类就完成了任务,因此感觉不到工厂模式的优势。在第三次作业中,针对每个类建立了对应的工厂,由专用的工厂来生成对应的类,这其中必然有多个工厂之间的相互配合,比如说我们创建一个表达式,先用表达式工厂把其中各个项读取出来,再用项工厂把其中各个因子读取出来,在根据因子调用相同的工厂,如果没有工厂模式,创建方法必然极其臃肿且复杂。

五、心得体会

  一方面是正则表达式不够熟练,常常出现捕捉不到想要的内容的现象,另一个方面,在算法掌握上我还有很大差距,第三次作业几乎没有优化的思路。

六、心得体会

   每次作业都能够给我很大的锻炼,还有很多东西,比如说各种设计模式的知识,需要学习。

猜你喜欢

转载自www.cnblogs.com/riyuejiuzhao/p/12520181.html