Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-具有复合+;计算导数的访问者_Java_Composite_Visitor_Oop_Design Patterns - Fatal编程技术网

Java-具有复合+;计算导数的访问者

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

为了准备考试,我做了这个OOP()练习,实际上我被困在了一个看似简单的任务上:

编写一个层次结构,表示由和、积、常数和(唯一)变量组成的算术表达式。使组合可访问,并编写一个表达式,给定表达式,返回其导数。
最后,编写函数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))