BUAA-OO-第一单元总结

22373082-李子木 学生 2024-03-20 18:26:12

目录

 

1. homework_1

1.0 题目要求

1.1 UML图及架构分析

1.2 代码量

1.3 复杂度分析

1.4 优点

1.5 缺点

2. homework_2

2.0 题目要求

2.1 UML图及架构分析

2.2 代码量

2.3 复杂度分析

2.4 优点

2.5 缺点

3. homework_3

3.0 题目要求

3.1 UML图及架构分析

3.2 代码量

3.3 复杂度分析

3.4 优点

3.5 缺点

4. 出现的bug

5. 基本思路

6. 我的优化

7. 架构设计体验

8. 心得体会

9. 未来方向


 

1. homework_1

1.0 题目要求

读入一个包含加、减、乘、乘方以及括号的单变量表达式,输出恒等变形展开所有括号后的表达式。

1.1 UML图及架构分析

 

 

 

数据存储类:

  • Expr
  • Term
  • Power
  • Factor
    • anstype 以n*(x^m)形式储存

解析类:

  • Token 存储数据类型
  • Lexer
  • Parser 按照Expr -> Term -> Power ->Factor进行递归下降解析

输出类:

  • Print对答案进行输出(答案以存有Anstype的数组形式储存)

1.2 代码量

 

 

 

1.3 复杂度分析

类复杂度

 

 

 

方法复杂度(截取部分)

 

 

 

1.4 优点

  1. 对于^,我在parserTerm中将其替换为...* ...* ...的形式,使得^*统一起来。
  2. ExprTerm Factor中均采用数组存储答案,答案的次幂对应其在数组中的位置 
  3. 相较于-1+x,字符串x-1的长度更短,于是在输出中先输出正数项,后输出负数项。
  4. 由于本次作业架构良好,目前程序已支持嵌套括号,减轻了第二次作业任务量。

1.5 缺点

  1. 一维数组可拓展性较低,第二次作业进行了大规模修改

2. homework_2

2.0 题目要求

支持嵌套多层括号;新增指数函数因子;新增自定义函数因子。

2.1 UML图及架构分析

 

 

数据存储类:(其余架构同homework_1)

  • Factor
    • varfun (新增)
    • anstype加入指数内容expn

操作类(预处理、输出):(架构同homework_1)

解析类:(其余架构同homework_1)

  • Token 新增func类型

计算类:

  • Static
    • 将乘法和加法处理方法从表达式化简中剥离
    • 存放函数表达式

2.2 代码量

 

 

 

 

2.3 复杂度分析

类复杂度

 

 

 

 

方法复杂度(截取部分)

 

 

 

2.4 优点

  1. 本次作业我利用二维数组储存,方便结构比较清晰,顺序固定。
  2. 新建Func类,在解析之前,通过字符串替换的方式,将自定义函数代入表达式。

2.5 缺点

  1. 二维数组深克隆过多导致爆栈

3. homework_3

3.0 题目要求

新增求导算子;支持调用其他“已定义的”函数。

3.1 UML图及架构分析

 

 

 

数据存储类:(其余架构同homework_2)

  • Factor 新增求导因子 Dfun类

解析类:(其余架构同homework_2)

  • Token 新增Dfun类型。

操作类:(同homework_2)

  • Static新增求导操作

3.2 代码量

 

 

 

3.3 复杂度分析

类复杂度

 

 

 

方法复杂度(截取部分)

 

 

 

 

3.4 优点

  1. 在上两次的基础上扩展,完成较快

3.5 缺点

  1. 并没有太多化简

4. 出现的bug

第二次作业强测阶段败在了如下数据,原因是递归超过10层时深克隆导致爆栈。

5. 基本思路

  1. Parse类对输入进行解析,返回一个完整的expr结构
  2. 对expr进行化简,返回一个数组
  3. 对数组进行print

6. 我的优化

  1. 采用专门的类来存储a*x^b项,有效解决数组、Hashmap多层嵌套不直观的问题;自己写数据克隆,有效解决数据类型自带克隆的深浅克隆问题。

7. 架构设计体验

  1. 很感谢助教组提供的递归下降教程和源代码,通过修改源代码,我很快上手了本单元作业,后续为使结构清晰,我将解析与计算解耦。
  2. 对于可能的新的迭代,我的架构具有良好的可扩展性:面对新的计算类型,修改解析与计算类,而面对自定义函数的变动,则修改Func类。

8. 心得体会

凭着OOpre多次迭代的经验,我在写hw1和hw2时就在有意识地搭建结构清晰、可读性强的架构:在测试部分做的不好,一方面依赖于同学的测评机、自主性不强,另一方面自己构造数据时没有着重构造最简洁、最易错、最麻烦、最大值的数据。

9. 未来方向

感觉教程写的挺好的

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

301

社区成员

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

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