北航OO第一单元作业总结

北航OO第一单元总结

磕磕绊绊也算勉强熬过了OO第一单元,在此作总结。

一、基于度量来分析程序结构

类图与结构图

第一次作业:

image

第二次作业:

image

第三次作业:

image

类图解释:

第一次作业因为输入形式简单,文法规则较少,仅设计了三各类,其中main类为调用方法、声明对象的入口,expression为term类的hashMap,借助hashmap的特性完成了合并同类项,实现了求导函数。Term类则含有两个属性,分别是指数和系数,实现了toString打印方法。
第二次作业相较于第一次作业增加了三角因子,表达式因子等,因此设计上更加复杂。最顶层为expression类,expression之下是term类,term类之下是抽象类factor,包括常数类cons,三角类tri,变量类var,表达式因子类expression。实现了factory工厂类以方便扩展,实现了simplyfy类以作化简。
第三次作业相较于第二次作业只增加了FormatCheck类做了输入正确性检查。

代码复杂度分析

方法复杂度

由于方法较多,在此只截取了复杂度较高的方法

第一次作业:

image

第二次作业:

image

第三次作业:

image

方法复杂度分析:

第一次作业复杂度较高的方法为Expression方法以及toString函数,其中Expression方法复杂度较高是因为实现了合并同类项等功能,而toString是包含了大量的if-else判断。
第二次作业复杂度较高的除了Expression方法外,还有包括大量if-else判断的factory方法。
第三次作业较第二次作业增加的复杂度较高的方法主要为格式检查类包括的方法,因为使用了栈操作以及大量的if判断、字符串处理,复杂度极高。

类复杂度:
第一次作业:

image

第二次作业:

image

第三次作业:

image

类复杂度分析:

第一次作业种main类只负责调用、声明,term类也只实现了toString等基本功能,化简、合并同类项、存储等均在expressipn类完成,因此复杂度较高。
第二次作业种由于expression、term类作为较为顶层的类均需要递归调用底层类方法以及实现复杂的解析操作,因此复杂度较高。此外Factory类复杂度也极高。
第三次作业种由于将格式检查这一复杂功能集中在一个类中完成,因此复杂度较高。

二、Bug分析

第一次作业在强测以及互测中均未测出错误。第二次作业由于toString函数设计存在缺陷,会出现x^0之类的零次幂不输出,导致出现(6+)之类的非法输出。第三次作业是格式检查时正则表达式书写有误,导致6+++7之类的表达式会被误解析为wrong format

三、发现别人bug策略

由于本人并不具备实现自动测评能力,发现别人bug主要通过直接尝试自己检查代码过程中用过的样例,直接阅读他人代码等方法发现bug。在后几次的作业中,由于输出各不相同,可借助python sympy进行化简对比。

四、重构经历

本人在第二次作业时进行了重构。由于第一次作业输入简单,因此只使用了正则表达式就完成了解析。但第二次作业相较于第一次作业输入更加复杂,含有三角函数等多种类,且求导法则也更加复杂,第一次作业已不适用,因此进行重构。

五、心得体会

  1. 推荐没有java基础的同学在寒假中完成pre,本人因为没有任何基础,寒假中又没有做pre,编程能力也不强,在前几次作业中感到格外疲于应付。
  2. 作业要先精心设计再动笔。本人第二次作业为无效作业,根本原因在于设计时没能遵循高内聚低耦合,输出设计、符号体系混乱,最终改动至自己也不知道自己的设计。
  3. 采用面向对象的思维,虽然面向过程不妨碍你通过一次作业,但这很难适用到下一次作业上,会让你在三周中屡次重构。
  4. java语言中有许多方便的工具,可以多家了解,重复造轮子效率低且出错率高。
  5. 要有过硬的心理素质,第一单元的难度总体来说是不友好的,至少对本人是这样的。
posted @ 2021-03-29 22:02  Gyy+  阅读(92)  评论(0编辑  收藏  举报