301
社区成员
发帖
与我相关
我的任务
分享本作业的代码架构分析如下:
主要的类设计:
表达式解析:
表达式展开:
通过递归下降算法和类的设计,可以实现对输入表达式的解析和生成相应的对象表示。然后可以根据具体需求进行进一步操作,例如展开表达式等。这样的代码架构能够使代码结构清晰、易于维护,并且方便扩展和修改。
理解递归下降算法的过程是第一个难点。关键是将整个解析过程看作是一个建树递归的过程,只不过是在多个函数之间的递归。函数之间有明显的层级关系,例如ParserExpr函数调用ParserTerm函数,ParserTerm函数调用ParserFactor函数。递归下降算法的核心是这三个函数之间的调用关系。ParserExpr函数是最顶层的解析表达式函数,它调用ParserTerm函数来解析表达式的每一项,然后ParserTerm函数又调用ParserFactor函数来解析项的每一个因子。
第二个难点是如何利用语法树进行括号展开。由于括号展开的结果一定是关于x的多项式,可以使用HashMap容器来存储语法树每个节点的状态,即每一项x的指数对应的系数。在递归回溯的展开计算过程中,可以维护每个节点的状态,并最终根据根节点的状态进行输出。
通过理解递归下降算法的调用关系和利用语法树进行括号展开的方法,可以解决第二次作业中的难点。这些理解和方法能够帮助我们设计和实现相应的代码逻辑,处理复杂的语法单元和括号展开要求。
第二次作业在第一次作业的基础上增加了三角函数因子、求和函数因子和自定义函数因子,使得解析的复杂度进一步提高。递归下降方法可以继续沿用,只需要增加几种语法单元即可。
嵌套括号处理:
ParserFactor函数中添加对左括号的处理逻辑,调用ParserExpr函数来解析括号内的表达式。自定义函数处理:
ParserFactor函数中添加对自定义函数的处理逻辑,解析函数名和实参,并将实参传入到相应的函数定义式中进行计算。指数函数处理:
ParserFactor函数中添加对指数函数的处理逻辑,解析指数的底数和指数,并进行计算。第二次作业的难点主要有两个:单项式类的建立,合并优化的问题。
单项式类的建立:
ax^bexp(Poly),所以单项式类的属性需要包含指数内的多项式Poly。合并优化问题:
isEqual方法。第三次作业太过复杂,未能思考清楚,在此给出设计思路
表达式求导:
自定义函数嵌套:
本单元作业经过三次迭代,层层加码,复杂度稳步提升,对面向对象的理解也逐渐深入。
个人收获总结:通过实践,我更深入地理解了面向对象的思想和设计原则。面向对象的编程方式强调将问题分解为对象,每个对象都有自己的属性和方法,并通过对象之间的交互来解决问题。这种思想使得代码更加模块化、可维护和可扩展。在完成程序设计过程中,我学会了如何设计良好的类和对象。通过合理划分类的职责和功能,将属性和方法封装在类中,使得代码结构清晰,易于理解和修改。同时通过继承、封装和多态等面向对象的特性,提高了代码的重用性和灵活性。