BUAA_OO_UNIT1博客

万胜豪-20374050 2024-03-23 13:44:20

1、基于度量分析程序结构

1.1 代码规模

本单元实验总代码规模如下:

可以看出,代码的主要部分为:

  1. myResult、Unit:属于对树节点的运算节点
  2. Parser、Lexer:必须的建树类
  3. Func***:函数替换相关类
  4. 其它树节点类,它们继承TreeNode类 

1.2 OO度量

对代码进行oo度量复杂度计算后,分别有主要复杂度如下:

Mainclass、Term、FuncProcess、Expr等主要功能的类复杂度较高,其它类复杂度可以接受。 

 

 MyResult中输出结果、Func模块进行字符串替换的部分方法复杂度较高,这体现了部分功能无法太好地解耦,只能集中处理。

1.3 类图

三次作业的类图架构均如下图所示,语法树最后得到的统一格式是myResult,而myResult是HashMap<Unit, Biginteger>,区别是:

第一次作业中:Unit是单一的index,表示x的多少次方

 第二次作业中:Unit是index和exp,表示x^index*exp(myResult),新增函数处理模块

 第三次作业中,在myResult和Unit中新增derive功能

我认为我的类的设计结构较为清晰,各部分之间协作的关系也很明确,缺点是函数处理部分复杂度偏高,可以优化。 

 

2、架构设计体验

结合类图基本结构,给出三次作业依次迭代的设计体验:

第一次作业中:考虑到未来的可扩展性,将语法树的计算结果统一成myResult,方便之后进行扩充

 第二次作业中:由于第一次作业留出了myResult的扩展空间,面对exp指数时便在里面进行操作,添加了Unit单元。同时,由于之前功能没有什么bug,在函数处理部分将原来的所有功能包装起来,使用字符串替换的方法而非语义计算的方法进行函数的处理,这样方便debug,也有较好的解耦效果。

 第三次作业中,由于myResult中支持求导,于是在myResult中加入了求导模块

如果增加x、y、z等多变量,在Unit中添加对应的变量表即可;如果出现三角函数,也可在Unit部分新增处理。 

3、分析程序bug

第一次和第三次作业均无bug,但第二次作业在处理函数时忘处理空字符了产生bug,bug修复时处理掉空字符便可以解决问题、在互测时未发现别人bug。

4、优化

第一次作业中,将所有输出体现为sigma(coe*x^index)的形式,特判coe=-1和coe=1、index = 0、index = 1等情形即可,在第二和第三次作业中,将exp()中的内容提取了最大公因数,如exp((1000*x+1000)) = exp((x + 1)) ^ 1000。

5、心得体会与未来方向

本单元的学习体会不错,难度适中,相关知识的提前教学也很充分,点赞!未来保持这种势头就很好了。

 

 

...全文
66 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

301

社区成员

发帖
与我相关
我的任务
社区描述
2023年北航面向对象设计与构造
学习 高校
社区管理员
  • YannaZhang
  • CajZella
  • C_ecelia
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧