OOunit1 总结

21231110-司亦菲 2024-03-23 22:54:39

hw1

代码解析

img

Expression: 表示一个由多个项组成的表达式。

成员变量:terms(一个包含多个 Term 对象的列表)
构造函数:接受一个 Term 对象列表作为参数,并将其赋https://img-community.csdnimg.cn/images/7585c7f389864dddae48f3251dc7c42f.jpg "#left")
值给成员变量 terms

ExpressionFactor: 表示一个作为因子的表达式。

继承自 Factor 类
成员变量:expr(一个 Expression 对象)
构造函数:接受一个 Expression 对象作为参数,并将其赋值给成员变量 expr

Factor: 一个抽象类,用作其他因子类的基类。
Lexer: 用于将输入字符串分解成标记(Token)。

成员变量:input(要解析的输入字符串)和 pos(当前解析位置)
构造函数:接受一个字符串作为输入,并初始化 input 和 pos
nextToken 方法:使用正则表达式解析输入字符串,并返回一个 Token 对象,表示下一个标记。如果输入无效或到达输入末尾,则返回 null。

MainClass: 程序的入口点,用于测试表达式处理。

main 方法:程序的入口点。它接受一个字符串输入,对其进行一系列的正则表达式替换,以简化表达式,并打印结果。

NumberFactor: 表示一个数值因子。

继承自 Factor 类
成员变量:value(一个表示数值的字符串)
构造函数:接受一个字符串作为参数,并将其赋值给成员变量 value

Parser: 用于解析表达式并构建抽象语法树。

成员变量:lexer(一个 Lexer 对象,用于解析输入)和 lookahead(下一个 Token 对象)
构造函数:接受一个 Lexer 对象作为参数,并初始化 lexer 和 lookahead
match 方法:用于匹配当前 lookahead 的类型,如果匹配成功,则前进到下一个 Token
parse 方法:启动解析过程,并返回一个 Expression 对象
expression 方法:解析表达式
term 方法:解析项
factor 方法:解析因子

Term: 表示一个由多个因子组成的项。

成员变量:factors(一个包含多个 Factor 对象的列表)
构造函数:接受一个 Factor 对象列表作为参数,并将其赋值给成员变量 factors

Token: 表示一个语法标记,如加法、减法、乘法等。

定义了一系列的静态常量,表示不同的标记类型,如 ADD、SUB、MUL 等。
成员变量:type(标记的类型)和 value(标记的值)
构造函数:接受标记类型和值作为参数,并初始化成员变量
toString 方法:返回一个表示 Token 对象的字符串

VariableFactor: 表示一个变量因子

hw2

在前者的基础上迭代增加了自定义函数因子和多层括号和指数函数。

关于括号嵌套,递归下降的方法能够解析出含有多层括号的表达式树,此需求已经在hw1中实现。

怎么应对新增的自定义函数因子?本人的一些初步思路在一位的学长的博客中得到印证和更加深层次的启发,最后选取采用类似于表达式树的形式架构。新增了Function类,进行表达式的解析和取代。注意程序的高聚合性。最后解析完成的自定义函数因子就是一个新的 Expr类型的 Factor。

hw3

在前者的基础上迭代增加了求导算子和其他“已定义的”函数。

思路是将求导算子视为单目运算符,新增DerivativeNode类实现Node接口,返回的,应当是其内容先计算再求导的结果。。

由于各种原因这部分没能交上,虽然后来自己完成了但也只能自测,就不详细讲了。

bug分析

自测没发现bug,不过没进互测,就先不分析了。

心得体会

本单元主要是对于java基础语法的考量以及如何从原先的面向过程的思维转化为面向对象的思维的考验,当然,就该次作业的工作量而言,确实还是挺大而且具有挑战性的,不过这样的经历也同样是对于同学们的宝贵经验,如何在压力中前进,并且不断学习进步和挑战自我,不仅仅是一门课程应有的态度,其实也是面对今后未来生活应有的态度。

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

301

社区成员

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

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