冒号课堂§4.4:情景范式 - 编程入门网
主要采用数据驱动的(data-driven)正向推理(forward chaining)法,而Prolog引擎采用目标驱动的(goal-driven)逆向推理(backward chaining)法。正向推理自底向上,利用推理规则从已有的事实数据推出更多的数据,直到达成目标;逆向推理正相反,自顶向下,从目标出发寻找满足结论的事实[3]。相比而言,正向推理适合针对不同输入作出不同反应,而逆向推理适合回答查询。现在是服务员根据客人的喜好提建议,当然用正向推理更合适。再说这类引擎与Java的集成更加方便,因此我们没有选择Prolog。”
讲到此处,每个人都意识到,只剩下最后一个范式了。 冒号提出一个新问题:“假如餐馆经理接到顾客投诉,反映服务人员态度不好,卫生状况也不理想,应该怎么办?” 问号抢先说:“首先我的接待员在迎客(receive)时要笑容可掬地对顾客说:‘欢迎光临!’,在送客(send)时要对顾客鞠躬:‘请慢走,欢迎下次再来’” 逗号接着说:“我的服务员在上完菜后应对客人说:‘请慢用’,句号的收银员也应加些礼貌用语,让人家高高兴兴地掏钱。” 句号补充道:“服务员在上菜(serve)前、厨师在烹饪(cook)前应洗手,厨工在洗碗(washDishes)后应对餐具消毒。” 冒号紧接着问:“如果餐馆对礼貌规范或卫生标准做修改,必然要牵扯不同类中的不同的方法,维护起来很不方便,怎样才能有效地解决这个问题呢?” 答案已经昭然若揭了。 冒号干脆自问自答:“不错,正是用切面式编程。只要创立两个Aspect:Etiquette和Sanitation,分别负责礼貌规范和卫生标准方面的事务。一旦某一方面的要求发生变化,比如餐馆来了外宾,或者碰上非典或禽流感,只需在相应的Aspect模块中作调整:将礼貌用语换成英语或者提高卫生标准等等。如果采用runtime AOP,甚至还可在运行期选择激活或禁用这些Aspect。” 下面开始有些**动,大伙早已脑中满满而腹中空空,有点头重脚轻了。 冒号见状,遂发出激动人心的号召:“今天的课到此结束,让我们从虚拟的餐馆中走出,到真实的餐馆中去吧!” 众人齐声欢呼。 冒号课堂§4.4:情景范式(7)时间:2011-06-27 BlogJava xyz98,插语 [1] 若输入数过大,则需要设定更小的dx。此外,还可能产生计算溢出。 [2] Rete算法是一种高效的模式匹配算法,用于实现规则生成系统(production rule system)。 [3] 用逻辑的语言来说,正向推理顺着从前件(即if语句)到后件(即then语句)的方向,逆向推理顺着从后件到前件的方向。 。总结 l 闭包是一种能保留当初创建时的环境变量的函数。它通常以匿名的方式存在,多用于函数式编程中,能使代码更加简洁清晰。Java中的匿名类可以看作OO化的闭包形式。 l Jess、Drools、JLisa、JRules等规则引擎主要基于正向推理,能无缝地与Java平台集成。它们提供了逻辑式编程环境,能有效地将业务规则从应用程序中分离出来,提高了软件的灵活性和可维护性。 l 每种编程范式都能在生活中找到它的应用,它们本来就是人类思维方式的投影。 “”参考 [1] Wikipedia.Closure (computer science).http://en.wikipedia.org/wiki/Closure_(computer_science) [2] Ernest Friedman-Hill.Jess 7.1p2 manual.http://www.jessrules.com/jess/docs/Jess71p2.pdf [3] Mark Proctor等.Drools Documentation.http://downloads.jboss.com/drools/docs/4.0.7.19894.GA/html_single/index.html 课后思考 l 同样一个问题用不同的语言来编程,代码可能会有极大的差异。你认为这种差异的主要根源是语言还是范式? l 认真研究本课中的编程范式汇 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |