OO第一单元作业总结

  oo第一单元作业基本要求就是对于输入字符串的求导操作,考察的部分主要是对于正则表达式的运用以及基本的面向对象的设计。

  一、第一次作业

  1、初步分析

第一次作业考察的是最简单的多项式求导,包含的内容只有常数项和幂次方,因为是第一接触面向对象,所以设计的其实很不面向对象,设计了一个Polynomial类,主要分为三部分:构造函数负责对输入字符串的处理,一个计算函数负责将处理后的字符串进行求导,一个输出函数负责将求导结果输出。

2、设计

UML图如下:

  

3、度量分析:

  ev(G)基本复杂度是用来衡量程序非结构化程度的,非结构成分降低了程序的质量,增加了代码的维护难度,使程序难于理解。因此,基本复杂度高意味着非结构化程度高,难以模块化和维护。实际上,           消除了一个错误有时会引起其他的错误。
  Iv(G)模块设计复杂度是用来衡量模块判定结构,即模块和其他模块的调用关系。软件模块设计复杂度高意味模块耦合度高,这将导致模块难于隔离、维护和复用。模块设计复杂度是从模块流程图中移去           那些不包含调用子模块的判定和循环结构后得出的圈复杂度,因此模块设计复杂度不能大于圈复杂度,通常是远小于圈复杂度。
  v(G)是用来衡量一个模块判定结构的复杂程度,数量上表现为独立路径的条数,即合理的预防错误所需测试的最少路径条数,圈复杂度大说明程序代码可能质量低且难于测试和维护,经验表明,程序的可         能错误和高的圈复杂度有着很大关系。”

  其中我们可以看到代码中ev(G)总体还是比较低的,但是后面iv(G)和v(G)总体还是偏高的,说明对于模块之间的解耦以及条件判定做的不是特别好

  4、代码规模

  

  5、注意事项

  1)首先就是正则表达式的书写,一开始我是尝试匹配整个字符串,但出现的情况是在字符串过长且回溯很多次数的情况下会爆栈

  2)其次是正则表达式中我用的是\\s匹配空格或者tab,但其实\\s匹配的范围比这个要宽,所以这个是很不严谨的写法

  6、总结

  总的来说第一次作业代码规模相对还是比较小的,需要花费的时间其实也很短,我个人的话是写了大概三四个小时就写完了,这还包括我大概用了两个小时学习怎么用正则表达式,但因为第一次作业用          的是很面向过程的方法,所以后面几次作业其实基本没有在第一次的基础上写。

  二、第二次作业

  1、初步分析

  第二次作业在第一次作业的基础上加入了sin和cos函数,但因为我没有考虑到之后的扩展性问题,所以简单的将存储方式抽象为了常数项,x的幂,sinx的幂,cosx的幂,虽然这次作业挺好写的,但最后一         次作业基本是重构了整个代码

  2、设计

  UML图如下:

  

  相比较上一次的设计,这次的设计初步有了一点点面向对象的思路,我主要创建了三个类:Expression,Term,Factor,他们共同拥有一个父类Poly

  3、度量分析

  

  

  这次有几个方法的ev(G)非常高,主要原因是我这几个方法是构造方法我需要再这些方法中对输入字符串进行处理

  4、代码规模

  

  这次作业总体规模也比较小,代码行数有四百多行是因为里面有一百多行的测试程序

  5、注意事项

  1)这一次我发现我们可能需要规模化规范化测试,于是查阅中我和同学发现可以使用Junit编写测试文件,这样一方面修改代码后我们可以运行一遍测试程序保证没有引入其他的错误,另一方面也可以更              有逻辑的编写测试代码

  6、总结

  因为这次代码我采用的存储结构相对简单,所以这次代码其实对我而言工作量和上一次基本一模一样,而且加上这次对于正则表达式比上一次要更加熟悉,所以其实花费的时间比上次还要少一点,总体来         说如果这一次采用这种稍微有点投机的方式的话,代码量一级需要花费的时间还是比较少的。

  三、第三次作业

  1、初步分析

  这次作业相比前两次难度其实提高了很多,前两次设计出来的代码架构这一次基本是用不了的,而且要考虑迭代的问题,所以设计部分花费的功夫比前两次多很多,如果设计出来的思路比较清晰地话,其         实真正代码熟悉的时间反而没有那么多

  2、设计

  UML图如下:

  

  总体思路其实还是延续了上一次的,不同的就是将Factor分的更细了一点便于Factor中表达式的处理

  3、度量分析

  

  

 

  其实观察度量分析可以发现除了举个构造方法外大多数方法的复杂度还是比较低的,总体而言其实解耦等做的没有特别差

  4、代码规模

  

 

   正如我之前所说,其实将整个框架构建好之后代码规模还是不大的,去除一些test文件总共只有五百多行代码,不过这是建立在我对输出没有做大规模优化的前提下。

  5、注意事项

  1)对于输入字符串的处理:因为这一次出现了括号,但正如我们所知,正则表达式是不能判断输入括号的正确与否的,所以对于括号部分的处理只能通过状态机进行判断然后将内部结构交由正则表达式                 处理

  2)测试文件的书写:其实这次测试文件已经很难写了,因为对于一个输入我们的输出很难和我们预想的输出一模一样,所以我只在几个小模块中使用了Junit测试,对于整体的输出,我是通过编写对应的               python代码通过取值判断输出结果是否正确

  6、总结

  这次代码其实如果设计比较清晰地话总体工作量没有想象的那么大,我这次的作业编写大概花了七八个小时,然而设计大概也花了这么长时间,虽然说设计大部分时间是在空想,但的确一个好的设计能够         减少很多工作量

  四、总结

  1、其实第三次代码写完后上课的时候我就意识到了自己一个不太好的地方,就是Factor的创建其实应该是使用工厂模式的,这样的创建是更合理的

  2、对于嵌套括号的其实可以做优化处理,负责反复嵌套创建对于时间的要求是非常高的

 

posted @ 2019-03-26 00:35  xzbuaa  阅读(177)  评论(0)    收藏  举报