2011-10-05 49 views
4

我在考虑一个对象结构,它将执行复杂的计算。基于用户的GUI上的条目完成计算。复杂计算器的对象模型

的表现公式是这样的:

A = B+C; 
B = D*E; 
C = C; (simply value insert by the user) 
D = C/E; 
E = C*C; 

用户可以对所有的值输入值(A至E /在实际项目中,大约有210变量)。如果不可能开发一个数学公式来计算其他值,它将通过迭代值完成,直到找到一个“工作设置”。

我现在在考虑以下结构: 每个变量都是数据类的对象。每个数据类可以在其他数据类上注册一个侦听器来获取值更改事件。如果数据类获取值更改事件,它会重新计算自身,并通知所有侦听器关于它自己的数据更改。

现在的问题如下: 如果此链中的最后一次计算得到结果,输入的值不可能(例如“除以零”),它会将其值设置为最接近的可能值(在这种情况下是1)。然后,链中的所有计算必须以相反的顺序再次完成。

在你的眼中,是否有比这个基于聆听者的结构更好的结构,每个人都重新计算,如果他检测到观察变量发生变化事件(有210个可变参数,我将放弃概述计算什么,何时和为什么;中央计算结构似乎对我更可维持,但我无法想象中央计算单元的良好结构)。

欢迎任何意见和建议! 干杯, 琼

回答

2

你正在实施的是所谓的reactive programming。该文章还提到,直接使用观察者模式可能会导致性能问题。

有几个库实现了对这种编程模型的支持,你可以看看其中的一些并找出他们在做什么。据我所知,其中许多人使用依赖关系的图形视图,并且只有在新值达到所有可达输入时才重新计算表达式的值。

+1

感谢您的回答:我正在读Java中的RP,但到现在为止我没有找到具体的实现。也许我会在这里获得更多信息 - 无论如何,我会回到你身边。谢谢这么久。 –

+0

@Patrick我也对这个感兴趣,并且搜索了一段时间。不幸的是,我找不到一个正在实施响应式编程的活动/工作项目。你能在答案中提供一个或两个例子吗? – Erik

3

很多谷歌的时间支出后,我发现在谷歌代码进行无Java的一个有趣的项目:reactive4java

我没有尝试过这个项目还没有,但不像其他项目,我发现(FrappéJuniorSugarCubes),它似乎仍然活跃,正在开发中。其他提到的项目要么不再可用,要么在几年前有过最后一次更改。

更新: 玩过reactive4java之后,我得出结论,这个项目不能用在oop上下文中来做计算。我不可能(直到现在)将项目中的任何对象或值与Reactive-kernel绑定,反之亦然。如果我对此有更多了解,我会再次发布。

更新2:谈论该项目的维护者后,我指出了如何结合对reactive4java框架的数据对象,所以框架做了计算,当一个数据对象的变化。玩过框架之后,我会发布一个详细的工作示例。

+0

嗨!以下是我扔在一起的示例应用程序:http://code.google.com/p/reactive4java/wiki/Examples – akarnokd

1

几年前,我已经看到了反应式编程 - 但我认为您不会用这种编码来更好地了解您的项目。它只是让你摆脱处理观察员和事件。