`
hxpwork
  • 浏览: 111364 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

drools技巧:声明式关系编程

阅读更多
 

声明式关系编程 <o:p></o:p>

作者:Mark Proctor <o:p></o:p>

这篇文章是从我在InfoQ上的评论Debate: ODBMS sometimes a better alternative to O/R Mapping?.(讨论:ODBMS有时是比O/R映射更好的选择)引申而来

面向对象的深层图模型——pojo规范,难以通过声明进行推论,虽然它可以在命令式编程中有良好表现。随着WSC完成描述逻辑的标准化定义OWL-DL(一种面向语义Web的知识表示标记语言,具有较强的知识表达能力并适合大规模应用的推理效率)并将其与声明式推论系统如Drools结合(将在4.0之后增加基于模型的描述逻辑),你已经在应用开发方面有了一种更有力的方式(虽然可能没有框架式/子系统式开发)——不考虑OWL-Full,它是一种演习,并且RDF(资源描述框架)三元组是不合适的, 但可以幸运的被考虑成一种传输机制。声明式关系编程显然有一种更接近于11的数据库映射。[译者注:这段话涉及OWL的理论定义,为了更好的理解,请翻阅
http://zh.transwiki.org/cn/owlguide.htm]<o:p></o:p>

看一个我们提供的简单示例Conways Game of Life(将很快被更新到规则流,代替agenda group,使其更具有声明性)。在这个例子中,我们有一个巨大的NxN的表格单元对象,之前的方法是对每一格Cell有一个围绕在它周围的Cell的一个HashSet。要计算围绕在周围的死亡/生存单元格的数量,只能通过对每一个cellHashSet进行命令式的迭代。这将产生重复多余的工作,因为我们不知道那里有/没有变化,我们可以进行跟踪,但是接着会带来更多的用于跟踪的命令式代码。更新的Conways例子将使用关系方法,没有嵌套的对象(虽然仍然没有DL,它在4.0中提供),代替的是我们使用一个Neighbour类对每一个围绕的Cell进行双向的关联;这意味着我们简单的声明想要它对死亡/生存的Cell进行跟踪,系统将根据它对关系的理解以及什么有/没有变化的情况,为我们完成剩下的工作。
http://anonsvn.labs.jboss.com/labs/jbossrules/trunk/drools-examples/src/main/rules/org/drools/examples/conway/conway.drl
rule "Calculate Live"
    agenda-group "calculate"
    lock-on-active
when
    theCell: Cell(cellState == CellState.LIVE)
    Neighbor(cell == theCell, $neighbor : neighbor)
then
    $neighbor.setLiveNeighbors( $neighbor.getLiveNeighbors() + 1 );
    $neighbor.setPhase( Phase.EVALUATE );
    modify( $neighbor );
end

rule "Calculate Dead"
    agenda-group "calculate"
    lock-on-active
when
    theCell: Cell(cellState == CellState.DEAD)
    Neighbor(cell == theCell, $neighbor : neighbor )
then
    $neighbor.setLiveNeighbors( $neighbor.getLiveNeighbors() - 1 );
    $neighbor.setPhase( Phase.EVALUATE );
    modify( $neighbor );
end

我也建议你看一下"register neighbor"规则,你可以了解Neighbour关系怎样被设置声明,开发在Cell中的columnrow字段的叉集。<o:p></o:p>

这只是一个使用建议逻辑的简单例子,你可以将这些关系开发的更多,尤其工作在数据集和一阶逻辑中的'collect', 'accumulate' 'forall'情况时。更多的信息请看What's new in JBoss Rules 4.0,它会在下个月中旬发布。<o:p></o:p>

<o:p> </o:p>

<o:p> </o:p>

分享到:
评论

相关推荐

    Drools JBoss Rules 5 Developers Guide

    - **定义与背景**:Drools 是一个开源业务规则管理系统(Business Rule Management System, BRMS),它支持开发人员通过声明式编程来实现业务逻辑。Drools 由 JBoss 维护,并作为 Red Hat JBoss BRMS 的一部分。 - *...

    FIT-FOR-RULES

    Drools是一个开源的业务规则管理系统(BRMS),它允许开发者以声明式的方式定义业务规则,并在运行时高效地执行这些规则。 【描述】提到的"JAVA规则推理DROOLS"是指使用Drools框架来实现基于规则的逻辑推理。Drools...

    office2john的源文件

    office2john的源文件

    青海省各市、县区及街镇SVG图

    青海省各市、县区及街镇SVG图

    (源码)基于JavaNIO框架的网络IO处理系统.zip

    # 基于Java NIO框架的网络IO处理系统 ## 项目简介 本项目是一个基于Java NIO(非阻塞IO)框架的网络IO处理系统。通过使用Java NIO的多路复用技术,系统能够高效地处理多个客户端的连接和IO操作。项目涵盖了从基本的Socket编程到复杂的NIO多路复用实现,适合学习和理解Java网络编程的高级特性。 ## 项目的主要特性和功能 1. 多路复用技术使用Java NIO的Selector机制,实现单线程处理多个客户端的连接和IO操作。 2. 多线程处理通过多线程技术,系统能够并发处理多个客户端的请求,提高服务器的处理能力。 3. 文件IO操作包括基本的文件写入、缓冲文件IO、随机访问文件写入等操作,展示了Java文件IO的多种实现方式。 4. 网络IO操作包括Socket客户端和服务器的实现,展示了如何使用Java进行网络通信。

    数据结构- C语言版-树的遍历代码

    二叉树先、中、后序遍历及层次遍历代码 C90版

    支持向量机 - SVM支持向量机

    支持向量机

    (源码)基于Arduino和Android的温湿度数据采集系统.zip

    # 基于Arduino和Android的温湿度数据采集系统 ## 项目简介 本项目是一个基于Arduino和Android的温湿度数据采集系统,主要用于远程监控环境中的温湿度数据。系统由Arduino Nano控制DHT22传感器进行数据采集,并通过USRWIFI232A模块将数据传输到Android设备。Android端通过WiFi连接到服务器,实时读取并显示温湿度数据。 ## 项目的主要特性和功能 硬件设计 使用Arduino Nano作为主控芯片。 采用DHT22传感器进行温湿度数据采集。 通过USRWIFI232A模块实现无线数据传输。 软件设计 Arduino端实现DHT传感器的读取功能,包括温度和湿度的数据采集与处理。 Android端开发了一个Android应用,通过WiFi连接到服务器,实时读取并显示温湿度数据。 功能模块

    c语言情人节的红玫瑰.rar

    c语言情人节的红玫瑰

    c语言UDP传输系统源码.rar

    c语言UDP传输系统源码

    数字标识控件.zip

    数字标识控件

    c语言打字母游戏源码.rar

    c语言打字母游戏源码

    c语言实现数字雨.rar

    c语言实现数字雨

    android Gallery实现异步加载网络图片 并只加载当前停止页面图.zip

    android Gallery实现异步加载网络图片 并只加载当前停止页面图

    C#ASP.NET手机端H5会议室预约系统源码 手机版会议室预约源码数据库 SQL2008源码类型 WebForm

    ASP.NET手机端H5会议室预约系统源码 手机版会议室预约源码 一、源码介绍 H5手机版会议室预约系统是一个高效快速便利的内部预约平台,让需要预定会议室的人能通过这个平 台发布预定,没有预定的人也能通过平台查看他人预定。通过后台添加账号即可登录预约平台,发布会 议室预定。 二、主要功能 后台管理包括 会议室信息管理,预约信息管理,用户信息管理。 前台手机版预约系统包括 日历查看预定信息,点击进入所选日期详细预约信息,预定会议室,我的预 约等功能模块。 后台采用模型管理功能可以使用后台对表结构进行维护,方便二次开发。 后台也可以增加部门,实现各部门之间管理员查看各自部门预约信息,用户信息等功能。

    九州仙侠传2砸蛋系统以及各类修复带数据库

    修复了实时获取区服 修复多区识别问题 带CDK功能 还有一些 忘记了 1年前修复的 好久没搞了

    C#ASP.NET教育培训管理系统源码数据库 Access源码类型 WinForm

    ASP.NET教育培训管理系统源码 一、源码描述:可以实现学员发卡,学员缴费,学员上课,教师管理,课程管理,图书管理, 水晶报表查询,文字与图形并存,管理员权限设置,学员生日提醒,图书逾期提醒。 二、菜单功能 1、 学员管理 2、 教师管理 3、 课程管理 4、 图书管理 5、 统计报表 6、 辅助功能 7、 系统设置 8、 添加学员 9、 学员上课 10、图书借阅 11、今日提醒 12、短信平台 13、微信平台 14、数据清理 三、注意事项 1、开发环境为Visual Studio 2010,数据库为ACCESS,使用.net 4.0开发, C/S架构。 2、管理员登陆名:admin 密码: admin

    考研真题及讲解介绍-数学-2024

    考研真题及讲解介绍-数学-2024

    c语言做的一个任务管理器.rar

    c语言做的一个任务管理器

Global site tag (gtag.js) - Google Analytics