Java-具有复合+;计算导数的访问者
为了准备考试,我做了这个OOP()练习,实际上我被困在了一个看似简单的任务上: 编写一个层次结构,表示由和、积、常数和(唯一)变量组成的算术表达式。使组合可访问,并编写一个表达式,给定表达式,返回其导数。Java-具有复合+;计算导数的访问者,java,composite,visitor,oop,design-patterns,Java,Composite,Visitor,Oop,Design Patterns,为了准备考试,我做了这个OOP()练习,实际上我被困在了一个看似简单的任务上: 编写一个层次结构,表示由和、积、常数和(唯一)变量组成的算术表达式。使组合可访问,并编写一个表达式,给定表达式,返回其导数。 最后,编写函数MyApp,生成一个表示函数2(x^2)-3(我认为它隐含的意思是y=2(x^2)-3,Ed.)的对象,并计算他的导数 最后一部分(MyApp创建)可以从问题中省略 因此,我的基本知识告诉我创建一个接口“表达式”,它将由多个类实现:Sum、Product、Constant和Var
最后,编写函数MyApp,生成一个表示函数
2(x^2)-3
(我认为它隐含的意思是y=2(x^2)-3
,Ed.)的对象,并计算他的导数
最后一部分(MyApp创建)可以从问题中省略
因此,我的基本知识告诉我创建一个接口“表达式”,它将由多个类实现:Sum、Product、Constant和Variable
然后我需要创建一个接口“Visitor”,它将由多个Visitor类实现:SumVisitor、ProductVisitor、ConstantVisitor、VariableVisitor,这些类计算每个表达式的导数并将其作为表达式返回
如果我想这样做,我还必须通过创建一个accept(Visitor)
方法来使复合visible,但这就是我被卡住的地方,因为我不能很好地理解它(该方法放在哪里?必须克服它吗?等等)
我已经在谷歌上搜索过了,但我无法将我发现的关于复合访问者的信息应用到这个练习中
这不是家庭作业,只是为了更好地理解模式我想做的练习,如果我想通过考试,我真的需要这样做
希望你能给我一些提示(或者你个人的解决方案,我不介意)
谢谢。您可以将任何代数表达式解析到树中,其中节点是运算符,叶子是操作数。您需要一个迭代器来遍历树。你可以对你想要的操作数应用任何函数。我想,一个表达式访问者就足够了。如果不允许在表达式类中放置派生逻辑,则需要一种模式匹配:
pow(var,expr)->mul(expr,pow(var,subtr(expr,con(1)))
。可以将任何代数表达式解析到树中,其中节点是运算符,叶子是操作数。您需要一个迭代器来遍历树。你可以对你想要的操作数应用任何函数。我想,一个表达式访问者就足够了。如果不允许在表达式类中放置派生逻辑,则需要一种模式匹配:pow(var,expr)->mul(expr,pow(var,subtr(expr,con(1))
。