OO第一单元总结

ring-of-sun 2019-03-26 原文

OO第一单元总结

  第一单元oo的作业已经结束,3次递进式的编程作业和2次实验课作业让我们初步体会到了面向对象的思想,以下对本人在第一单元中的三次作业进行分析和总结。

 一、三次作业的结构分析

  1、类个数及长度分析

    

第一次作业

 

第二次作业

第三次作业

  从图中可以直观的看出,第一次作业中只有两个类,说明当时对面向对象的思想还相当不了解,更多的是像之前一样面向过程,针对给出的问题一步步寻求解决的方案;而第二次作业类的数目就增加到了6个,已经开始尝试去面向对象编程,把多项式求导分解成了对多项式这一类具有相似特征的一系列操作,多项式类、求导类、合并类······还增加了老师建议的InputHandler,已经开始按照面向对象的思想分析问题;第三次作业的这一特征更加明显,递归下降使得类与类之间有了更密切的联系,表达式 -> 项 -> 因子,功能的实现在类的内部,类之间依赖于信息的传递。

  代码的长度由第一次的450行到第二次的720行再到第三次的700行,实现的是越来越复杂的功能,后面的程序支持前面的程序,第三次因为类之间的配合更密切以及优化写的比较粗糙(泪。。。),其长度反而比第二次要短。

  2、复杂度分析

  注:  

    ev(G)基本复杂度。

    iv(G)循环复杂度。

    v(G)整体复杂度。

第一次作业

第二次作业

第三次作业

  从以上的表格可以看出,我每次作业都有几个方法的复杂度偏高,而且绝大多数都是iv偏高,分析原因,在这些方法中都用了较多的for循环,以及极多的if-else语句,这就可以看出我在分析问题时习惯于穷举可能发生的情况,这就导致了在情况多的时候方法的复杂度会较高,今后可能需要尝试更为有效的解析问题的方法。

  3、类图分析

第一次作业

第二次作业

第三次作业

  三次作业的特点非常鲜明,第一次作业中只用到了两个类,也只是在 main 调用了 poly ,这也直接导致了我第二次作业的完全重构;第二次作业类与类之间的关系也非常不密切,只是通过主类依次调用各个类来实现目的;而第三次作业中,类与类之间就有了联系,通过主类来调度,在 Item 和 Poly 这两个类之间递归直至发现了最基本的因子,再去调用因子对应的类。和其他人的程序比较发现,在我认为我以及很面向对象了的情况下,一些共同的功能(如求导)我没有用接口的方式去解决,也就是我在3次作业中并没有用到接口,可见还是没有熟练的掌握面向对象的思想。

 二、bug分析

  1、第一次作业

    第一次作业中出现的bug是没有考虑出<space>和<tab>之外的空白字符,这个在修改时只需要把正则中用到 \\s 的地方改为 [\\t ]即可。 

  2、第二次作业

    第二次作业中的bug比较严重,没有考虑指数中带 + 号的情况,因为我在分割的过程中用 + 号作为了分割符对项进行分割,就导致了会出现异常,我在修复时采用了在判断合法的前提下把 ^+ 替换为 ^ ;还有一个bug出现在我的优化,我在优化之后可能把一个表达式优化为常数,而常数不可再次优化,这就导致会出现异常(无辜的眼神),我在把优化前的表达式进行了判断,解决了这一问题。

  3、第三次作业

    这次作业bug未知。

 三、bug发现策略

    前两次作业中,我因为没有使用正则判断表达式是否合法,而是采用了状态机的方式,因此我清楚各种应该输出WF的情况(所有情况:)),在测试的时候我先用这些数据盲测了一波,就能发现几个问题,然后挑两个倒霉的孩子学习他们的代码(找bug),读完的结果就是膜或者发起进攻。

    第三次作业我也用了前两次作业的方法,由于WF被禁止了,并没有发现bug,除此之外还用了评测机的方式,这个就相当有效了,当然,为了做个人,见好就收。

 四、Applying Creational Pattern

    与一份优秀的面向对象的相比,我的还差很多,虽然我大致理解面向对象的思想,但在我3次作业中,都没有用到继承和接口,所以有极大的重构空间,可以使那些相互依赖性强的类从一个父类继承下来,然后把一些共同具备的功能(主要指求导)用接口实现,这样就能使代码更加面向对象了。在面向对象课程的学习上我还有很长的路要走,希望在接下来的过程中,能够对面向对象的思想有更深的理解吧。

发表于 2019-03-26 23:24 孙旭东 阅读() 评论() 编辑 收藏

 

版权声明:本文为ring-of-sun原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/ring-of-sun/p/10604665.html

OO第一单元总结的更多相关文章

  1. OO第四单元总结暨学期总结

    OO第四单元总结暨学期总结 一、第四单元作业架构设计   我们第四单元围绕UML图展开,在第四单元开始之前,本 […]...

  2. OO第三单元总结

    OO第三单元总结 一、作业概览  我们这一单元的主题是JML,即按照给定的JML规格实现具有要求功能的类,实现 […]...

随机推荐

  1. 符号链接

    关于关于NTFS符号链接(Windows平台),详见“NTFS符号链接”。 符号链接(软链接)是一类特殊的文件 […]...

  2. POI 导入导出时异常[java.io.IOException: Broken pipe]

    使用用POI导出文件时抛出异常java.io.IOException: Broken pipe ERROR: […]...

  3. 数据结构与算法之最好学的最小生成树

      数缺形时少直观,形缺数时难入微。 ——华罗庚 序 最小生成树问题是我在各项图论问题中最先理解与解决的,其目 […]...

  4. MATLAB 中有哪些命令,让人相见恨晚

    一、常用对象操作:除了一般windows窗口的常用功能键外。1、!dir 可以查看当前工作目录的文件。 !di […]...

  5. 配置 containerd 镜像仓库完全攻略

    作者简介 王海龙,Rancher中国社区技术经理,负责Rancher中国技术社区的维护和运营。拥有6年的云计算 […]...

  6. 推荐一个好用的进程守护服务管理工具

    SrvanyUI...

  7. 适合Linux新手的发行版有哪些?

      一个很古老的问题,找到适合的 Linux 发行版比简单的指出哪种 Linux 版本受欢迎更重要。为什么这么 […]...

  8. WC2021 云游记

    WC2021 云游记 反正都退役了,就去颓废了 6 天。 Day -inf 听说是用 CSP 成绩去的,没想到 […]...

展开目录

目录导航