OO2021 - 第一单元总结

2021面向对象设计与结构 - 第一单元(表达式求导)

 

由于个人学习能力不足,导致第一单元只完成了第一次作业,因此这里只会说第一次作业的部分。

 

第一次作业 - 简单多项式导函数的求解

UML图


 

类与方法的介绍

Main类

  • run()用于获取输入String参数,并创建Expression类将参数传过去进行后续操作。

Expression类

  • getExp()用于将run()传过来的String参数以项的形式进行拆分。
  • processExp()用于将String参数以因子的形式进一步进行拆分。
  • storeMap()用于将拆分好的因子根据各自的系数及指数进行累加,并存储到HashMap里。
  • calc()用于将存储在HashMap里的Term类进行求导,并同时将系数为0的Term类给忽略掉,为后面输出作提前准备。
  • check()用于检查即将用于输出的HashMap大小是否为0,若大小为0,表示没有任何需要输出的,输出0。若大小大于0,表示有结果需要进行输出,则调用print()进行输出处理。

Term类

  • 用于存储coe系数及exp指数。

 


 

基于度量分析程序结构

程序整体结构

方法分析

通过方法分析可以看到print()和Term(String)的复杂度都是很高的,原因是这两个方法里都使用了大量的if-else语句对数据进行处理。但也正是因为这个原因,导致了代码的扩展性差,需要重构以完成第二次作业。

 

类分析

类分析与方法分析的情况相似,由于Main类只用于获取输入及启动运行,因此复杂度全都集中在Expression类和Term类,原因就是上面提及的print()和Term(String)方法。

 

程序结构优缺点分析

优点:由于是基于针对题目的解题思路而编写的代码,因此思路较为清晰明了,比较不容易有bug。

缺点:由于本次作业的代码中大量的使用了判断及循环语句,因此若出现问题时较难解决。同时由于扩展性差,因此需要添加功能时,就有需要重构的可能。

 


 

bug分析

在强测数据中发现,少考虑了存放输出数据的HashMap为空的情况(即系数为0或其他理由被忽略掉)下需要如何输出的问题,同时还有几个人抓着我的这个bug来hack。但我也在之后的buug修复阶段修复了这个问题。

很可惜这次没能(忘了)参加互测,下次一定会积极参加互测,找对方bug的同时也能吸收其他人的解题写代码思路。

 


 

心得体会

由于自己学习能力不足,对陌生的东西需要较长的时间研究适应及尝试,导致这次只完成了第一次作业,这确实是自己比较不想看到的。但不得不承认的是,完成第一次作业当下的我确实感受到了满满的满足感,这一次作业也让我学习到很多。

最后还是给自己一点小小的鼓励吧,无论之后的作业多难都一定要更认真的研究学习,让自己尽量跟上大家的脚步,加油加油加油!

 

posted @ 2021-03-30 04:08  tanchiachun  阅读(69)  评论(2编辑  收藏  举报