OO第一单元博客作业

刘栋泉-70066015 2026-04-01 17:21:44

一,架构设计

方法度量

 

类度量

 类图

main:程序入口

inputnormalizer:预处理类移除空白符和反复替换连续符号

lexer:词法分析,将输入的表达式分成一个个Token

parser:根据文法规则将表达式字符串解析为Poly对象,支持运算符优先级和条件表达式

functionregistry:集中管理非递归函数和递归函数的定义,并提供统一的函数调用扩展接口

recursivefunction:存储递归函数的基础情况和递推关系,使用缓存实现递归展开,避免重复计算

recurrence:封装递归函数中f{n}与f{n-1}、f{n-2}的关系参数

callkey:封装递归调用时的索引和参数

poly:实现代数运算、求导、替换

unit:乘法合并和有序比较

二、 架构设计体验:

第一次作业采用Lexer-Parser-Poly三层架构,Poly用Map表示多项式,结构清晰但功能受限。

第二次作业是关键重构,为支持exp和函数调用,引入Unit内部类将多项式表示重构为Map<Unit,BigInteger>,Unit封装了幂次和exp参数。

第三次作业采用增量扩展,Unit增加yPower字段支持二元变量,Parser增加求导和选择表达式解析,Poly实现求导方法,FunctionRegistry管理递归函数。

三,bug

第一次作业:无

第二次作业:有一处CPU_TIME_LIMIT_EXCEED和输出错误

第三次作业:有输出错误

互测的时候采用自己构造一些边界样例,在自己的代码先运行一次,成功的话再拿去互测。

四,优化

每次作业都会在上一次作业的基础上,把时间复杂度进行降维。以便保证计算的正确率。在replaceX和递归展开都使用缓存的办法,以避免计算重复。

五,新得体会

通过这三次作业学会面对扩展性的任务如何设计一个良好的架构,虽然在hw2,hw3的互测中被hack很多,但是相对于我来说有小小的进步。

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

302

社区成员

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

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