FreeOZ论坛
标题:
R++: Rule based programming in C++
[打印本页]
作者:
coredump
时间:
8-5-2009 13:46
标题:
R++: Rule based programming in C++
登录/注册后可看大图
R++
, 来自Bell实验室的C++扩展, 如上图所示R++在C++ OOP的基础上增加了一个Rules维度,使得可以在C++的class中定义规则和基于规则的动作。如果你对Java很熟悉的话,应该听说过一个Drool的软件包,其用XML的方式时间了Java的商业规则引擎,而R++就是采用了C++的方式实现了Drool所做的事情。
附件为R++用户手册和R++的一个简单例子, 同样的例子如果用Drool来表达的话应该像下面这个样子:
<rule name="update area">
<parameter identifier="rectangle">
<class>Rectangle>
parameter>
<java:condition>
rectangle.height > 0 && rectangle.width > 0
java:condition>
<java:consequence>
stockOffer.area = rectangle.height * rectangle.width;
java:consequence>
rule>
复制代码
R++写出来的是这样:
Rectangle.rh
class Rectangle {
private:
monitored int height, width;
int area;
public:
Rectangle(int h, int w) : height(h), width(w) {}
add_to_height(int delta) { set_height(height + delta); }
rule update_area;
friend ostream& operator<<(ostream&, Rectangle * const);
};
复制代码
Rectangle.rC
#include <iostream.h>
$include "Rectangle.rh"
rule Rectangle::update_area {
height > 0 &&
width > 0
=>
area = height * width;
}
ostream& operator<< (ostream& s, Rectangle * const p) {
return s << "Rectangle " << p->height << " * "
<< p->width << " = "
<< p->area;
}
复制代码
作者:
coredump
时间:
8-5-2009 13:57
基于规则的编程(RBP) 可以应用在以下场景中:
使用独立于模型的规则来维护模型的完整性,规则可以独立于模型变化
使用规则监测物理系统(如电话交换机), 用规则检测状态变化,并对变化做出响应或者进行状态转移 (这就有点像状态机或者状态模式了)
使用规则定义配置变更或者商业逻辑
用于软件的异常和错误处理 (exception的替代品)
基于规则的编程的优点:
程序变得更清晰或稳固, 由于所有辅助性任务都被规则剥离与主逻辑之外, 避免了代码污染,规则的增删改也可以独立进行,不会混杂在主 要代码中间
比OOP更适合编写复杂软件
弥补需求和设计之间的鸿沟, 对于需求中的约束,策略,行为更可以很自然地映射为一个个的规则。
作者:
coredump
时间:
8-5-2009 14:12
PS:比较成熟的商业版的C++规则引擎我知道的事ILOG Rules for C++ :
http://www.ilog.cn/products/rules/index.php
, 这个规则引擎同时也可以用于Java。
作者:
ubuntuhk
时间:
8-5-2009 14:19
挺有用的,用R++做状态机确实是个不错的选择
欢迎光临 FreeOZ论坛 (https://www.freeoz.org/bbs/)
Powered by Discuz! X3.2