声明式关系编程 <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(资源描述框架)三元组是不合适的, 但可以幸运的被考虑成一种传输机制。声明式关系编程显然有一种更接近于1对1的数据库映射。[译者注:这段话涉及OWL的理论定义,为了更好的理解,请翻阅http://zh.transwiki.org/cn/owlguide.htm]<o:p></o:p>
看一个我们提供的简单示例Conways Game of Life(将很快被更新到规则流,代替agenda group,使其更具有声明性)。在这个例子中,我们有一个巨大的NxN的表格单元对象,之前的方法是对每一格Cell有一个围绕在它周围的Cell的一个HashSet。要计算围绕在周围的死亡/生存单元格的数量,只能通过对每一个cell的HashSet进行命令式的迭代。这将产生重复多余的工作,因为我们不知道那里有/没有变化,我们可以进行跟踪,但是接着会带来更多的用于跟踪的命令式代码。更新的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中的column与row字段的叉集。<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 是一个开源业务规则管理系统(Business Rule Management System, BRMS),它支持开发人员通过声明式编程来实现业务逻辑。Drools 由 JBoss 维护,并作为 Red Hat JBoss BRMS 的一部分。 - *...
Drools是一个开源的业务规则管理系统(BRMS),它允许开发者以声明式的方式定义业务规则,并在运行时高效地执行这些规则。 【描述】提到的"JAVA规则推理DROOLS"是指使用Drools框架来实现基于规则的逻辑推理。Drools...
office2john的源文件
青海省各市、县区及街镇SVG图
# 基于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进行网络通信。
二叉树先、中、后序遍历及层次遍历代码 C90版
支持向量机
# 基于Arduino和Android的温湿度数据采集系统 ## 项目简介 本项目是一个基于Arduino和Android的温湿度数据采集系统,主要用于远程监控环境中的温湿度数据。系统由Arduino Nano控制DHT22传感器进行数据采集,并通过USRWIFI232A模块将数据传输到Android设备。Android端通过WiFi连接到服务器,实时读取并显示温湿度数据。 ## 项目的主要特性和功能 硬件设计 使用Arduino Nano作为主控芯片。 采用DHT22传感器进行温湿度数据采集。 通过USRWIFI232A模块实现无线数据传输。 软件设计 Arduino端实现DHT传感器的读取功能,包括温度和湿度的数据采集与处理。 Android端开发了一个Android应用,通过WiFi连接到服务器,实时读取并显示温湿度数据。 功能模块
c语言情人节的红玫瑰
c语言UDP传输系统源码
数字标识控件
c语言打字母游戏源码
c语言实现数字雨
android Gallery实现异步加载网络图片 并只加载当前停止页面图
ASP.NET手机端H5会议室预约系统源码 手机版会议室预约源码 一、源码介绍 H5手机版会议室预约系统是一个高效快速便利的内部预约平台,让需要预定会议室的人能通过这个平 台发布预定,没有预定的人也能通过平台查看他人预定。通过后台添加账号即可登录预约平台,发布会 议室预定。 二、主要功能 后台管理包括 会议室信息管理,预约信息管理,用户信息管理。 前台手机版预约系统包括 日历查看预定信息,点击进入所选日期详细预约信息,预定会议室,我的预 约等功能模块。 后台采用模型管理功能可以使用后台对表结构进行维护,方便二次开发。 后台也可以增加部门,实现各部门之间管理员查看各自部门预约信息,用户信息等功能。
修复了实时获取区服 修复多区识别问题 带CDK功能 还有一些 忘记了 1年前修复的 好久没搞了
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
c语言做的一个任务管理器