GrapeCity的技术点滴

GrapeCity -- worldwide component vendor / provider
随笔 - 14, 评论 - 275, 引用 - 36

导航

关于

本Blog文章不是来自于个人,而是来自于GrapeCity技术团队的点点滴滴,其主要出处位于GCDN.

标签

每月存档

最新留言

广告

 

Agent之前-Object世界

 

在说起Agent之前,俺们还有必要先敬拜一下Agent的前辈Object,因为Agent实际上是由Object“进化”而来的。这话说出来,可能有些读者同志不太高兴了,Object有什么不好吗?现在这么多复杂的系统,不都是基于OO的思想设计出来的吗?

 

然也,OO的确为提高软件开发效率做出了很大的贡献,但是在使用过程中,OO也暴露出了一些处:

 

痒处一:OO并没有对现实世界中的实体加以区分

OO世界中,所有的软件实体都是Object,现实世界中的一张发票和一为员工,映射到OO世界中都是一个ClassClass发票具有一些数据(日期,金额)和操作(效验,保存),Class员工也具有一些数据(姓名,职位)和操作(上班,下班),从映射的角度来看,任何现实世界的实体都是数据和操作的集合。但实际上,在现实世界中,发票和员工还是有区别的。区别在哪里呢?在于发票是一个物体, 而员工是一个有心智的实体。发票类的方法只能是被动地被调用,如果我们不调用,任何一张发票都不会自动的进行效验或者保存。而员工的方法调用与否,是由员工自己来决定的。今天生病了, 不高兴上班,上班操作就不会被执行,今天任务重,他就会自动执行加班这个操作。换句话说员工类的操作不是被动调用的,而是自发完成的。

这种只能被动调用和自发执行的区别,归结一下其原因,是因为员工具有自己的心智,而发票是没有的。传统的OO并没有引入这个区分,而这种区分的却失所造成的结果就是所有的操作都是被动地等待调用。虽然我们也可以引入计时器,或者多线程技术来模拟主动操作,但这种并不完全贴合现实世界的设计思路是不是让各位隐约感觉有些不爽呢。

 

痒处二:同步和异步被人为地剥离。

上面讲的是OO对有些东东没有区分,这点说的是OO对某些东东又多余地加以了区分。比如,现实世界中,老师对同学们说:“请把书翻到78页。”老师并不需要知道翻书这个操作对于同学们来说是同步操作还是异步操作,他并没有说“请把书同步地/异步地翻到78页。”换句话说,翻书这个操作是同步还是异步,对于调用者(老师)来说,是不需要知道的,同学们知道就OK了。但是影射到OO世界中,对于调用者来说,他在调用的时候,就必须知道是同步调用还是异步调用。归纳起来说,在现实世界中,调用方式这种知识,是被调用方拥有的,而调用方是不需要考虑的,但在OO世界中,这个知识由被调用方转移到了调用方。Something is different。体会一下,这种差异会带来什么样的问题。

 

痒处三:无法自然地模拟现实世界中的感知能力(Sensebility

举个烧菜的例子来说明感知能力。老妈教俺烧菜的时候,常用的语法是:“当什么什么的时候,就怎么怎么样”。比如:当水烧开的时候,把肉放进去;当鸡块炸至金黄色的时候,捞出锅来。这就是感知能力的例子。鸡块作为感知源,它的属性可以发生变化;俺作为感知器,可以捕捉到鸡块的颜色这个属性的变化。如果鸡块的颜色由肉色转变至金黄色,俺就必须做出相应的操作/处理:把鸡块捞出锅来。

 

这种感知能力在现实世界中是非常普遍地存在的,然而映射到OO世界中来,却显的有些别扭。如果我们将鸡块和人构造为两个Class,要想人能感知到鸡块上某个属性值的变化,首先想到的是使用观察者(Observer)模式,在.Net平台下呢,则是在鸡块类中构造一个delegate,然后将人的某个操作挂到这个delegate上,当鸡块颜色值发生变化的时候,触发这个delegate。这种方式至少存在三个让人感觉别扭的地方:

 

l         鸡块就是鸡块,为什么鸡块这个Class里面要包含一个额外的delegate呢,这个delegate的存在对于实现鸡块这个class本身的逻辑来说没有任何意义,对于鸡块的逻辑而言,这个delegate是完全多余的,这还只是颜色属性上的delegate,不难想像,如果外界还有其他Class需要感知鸡块类其他属性上的变化,会有更多的delegate,更多的与鸡块本身逻辑不相干的代码出现。

 

l         注意到一个比较细节的问题。俺在看到鸡块颜色变为金黄色后,执行的操作是把鸡块捞出锅。这个“捞出锅”的操作,是由俺的心智来完成的,不是受鸡块的心智指挥,它自己蹦出锅来的。而在上面提到的使用delegate的解决方案中,我们把“捞出锅”这个操作挂载到delegate上,则“捞出锅”是由鸡块当前占用的线程来执行的,如果将线程理解为心智的话,则意味着是由鸡块的心智控制着人将自己捞出锅。是不是很诡异J  更直白地说法是:应该有一个线程来处理鸡块颜色的变化,另外再有一个线程来收到颜色变化的通知,并执行“捞出锅”的操作。这里有同志应该说了:也好办,把delegate的机制修改为多线程的就OK了!的确是这样,但需要注意的是要保持多线程机制对鸡块和人的透明性,如果因为需要贴近现实世界而增加Class的复杂性,那也违背了我们的初衷。

 

l         最后一个问题比较有意思。在现有的delegate解决方案中,我们只能针对实例(Instance)进行注册,而不可以针对类型(Type)进行注册。什么概念呢?比如锅里面有十个鸡块,俺得把“捞出锅”这个操作到这十个鸡块上依次注册一遍,才能保证每个鸡块在适当的时机被捞出来。是不是觉得和现实世界中的实际情况有些出入J 如果能够提供针对类型的注册机制,只要将俺的后续操作到鸡块类上注册一次,在感知范围内的所有鸡块,管他是十块还是二十块,都能被俺感知到颜色上的变化并执行正确的后续操作,这样会来的更简洁,更自然。

 

上面罗罗嗦嗦给OO挑了些毛病。实际上归纳起来就一句话:OO并不是对现实世界最贴切地模拟。而软件世界的终极目标是为了模拟现实世界,既然OO并不是最贴切的模拟,问题也就暴露出来了,改进的余地也就显现出来了。

     怎么改进?轮到Object的接班人Agent出场了。

打印 | 张贴于 2005-06-20 09:54:00 | Tag:Agent Oriented Programming

留言反馈

#回复: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
2007-12-17 00:21:00 | [匿名用户:MyRobot]
#回复: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
楼主既然对agent比较了解,或许该看看http://groups.google.com/group/myrobot,它不是源自agent,却实现了agent想实现的目标
2007-12-17 00:19:00 | [匿名用户:MyRobot]
#Thread是一根琴弦 编辑
Object也是代码,根本就是死的。就像木偶一样,如果没有一根Thread拴着就会耷拉下去!
2007-12-14 22:50:00 | [匿名用户:wishfly]
#回复: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
看看FIPA
2007-08-14 11:30:00 | [匿名用户:io]
#面向智能体开发框架 - GrapeCity Agent Framework for .NET 2.0 编辑
本篇文章将详细讲述 Agent Framework 的各种特性以及最新的研究进展,并共同探讨如何从Agent的角度摸索出一种新型高效的软件架构和开发模式,以缓解目前软件系统对服务能力的不断提高而对软件开发造成的巨大压力。
2007-07-09 11:02:00 | [匿名用户:TOX]
#回复: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
说一下
上面的鸡蛋被炸黄了
这应该是被感知源
而不是感知源
2007-03-31 21:37:00 | [匿名用户:飞飞雪]
#回复: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
FGDXFGH
2007-02-03 02:39:00 | [匿名用户:rtgok]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
OO虽然并不是对现实世界最贴切地模拟,但却是最行之有效的模拟。

当然楼主没有提出更好解决方案前,是最有效的。
2006-10-12 18:42:00 | [匿名用户:紧张工作室]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
good!!!!
2006-08-09 20:47:00 | [匿名用户:imdb]
#白话面向智能体编程(Agent Oriented Programmig, AOP)之四 编辑
同步异步的统一和同类群组
2006-05-10 09:10:00 | [匿名用户:dibaplus]
#白话面向智能体编程(Agent Oriented Programmig, AOP)之四 编辑
同步异步的统一和同类群组
2006-05-10 09:10:00 | [匿名用户:dibaplus]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
可以针对类型注册代理的,虽然部分场合sender有点怪。
2006-04-30 03:48:00 | [匿名用户:ziffwong]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
可以针对类型注册代理的,虽然不分场合sender有点怪。
2006-04-30 03:47:00 | [匿名用户:ziffwong]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
msn:
cyjotter@yahoo.com.cn
2006-04-05 17:51:00 | [匿名用户:cyj]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
个人认为这里说的这些其实不能称为“面向XX编程”,只不过告诉我们,我们写的程序要更加“智能化”、交互手段更丰富一点,这里的Agent其实就是一个系统,比如windows操作系统就是一个Agent,不管你是用结构化还是用OO方法开发的系统。
2006-04-05 16:49:00 | [匿名用户:cyj]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
不错不错,期待下文
2006-02-14 17:17:00 | [匿名用户:alan2lin]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
Agent 在哪
2006-01-13 11:37:00 | [匿名用户:下载]
#面向智能体编程(Agent Oriented Programmig, AOP)一些体会(zt) 编辑
我们知道人类从远古以来,都想能够想鸟儿一样在天空飞翔,可是如果去仅仅研究鸟儿,模拟鸟儿,是永远也不能真正飞上天的,现在我们知道,飞机能飞,是因为空气动力学,鸟儿能飞,只是符合这个特性的一种情况,一旦突破这一点,飞行不再是梦想。所以智能体是否能够真的产生,其本质我想需要近一步突破吧。
2005-12-29 13:23:00 | [匿名用户:花纯春]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
期待看到更多关于Agent的文章
2005-12-12 09:00:00 | [匿名用户:吕]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
我个人觉得agent是0bject的进化版这个观点还是正确的
2005-10-11 08:47:00 | [匿名用户:ggy]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
对于Agent的发展问题,记得看过这么一句话,"Agent是人工智能(AI)研究的起点,也是AI研究的最终目的"。
2005-09-19 09:03:00 | [匿名用户:teri]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
LEO继续啊.期待中啊,看了Maes,Michael等人的不少东东,很多地方还理不清楚,看了你写的东西之后很有启发啊。是不是在microsoft的工作太忙了,有空还是希望你多写点啊。
2005-09-19 09:01:00 | [匿名用户:teri]
#白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
Ping Back来自:blog.csdn.net
2005-09-11 21:37:00 | [匿名用户:caridle]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
文章内容让人很有激情,尤其是编程疯子看到了必然热血沸腾,我也是,关注ing.
2005-08-25 17:51:00 | [匿名用户:CoolBug]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
智能感知时代的开端?
2005-07-18 12:34:00 | [匿名用户:laily]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
而软件世界的终极目标是为了模拟现实世界???
2005-07-12 16:21:00 | [匿名用户:Da.Feng]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
刚开始摸到Agent,觉得的确很有意思。Agent技术好像已经发展了二十多年了吧。
我觉得Agent相对于Object最关键就是对象智能的引入,其实现在的OO系统,Object对外界刺激进行反应的能力早就具备了,Agent的特点似乎是它是有“目的感”的。Agent不是定义了对某某事件的某某反应,而是给出宽泛的“目的”(似乎术语叫“意图”Intention),由Agent自己根据一些规则对事件做出符合自身意图的反应。
所以,我觉得Agent要作为Object的进化方向,一定需要首先解决如何高效、准确地描述“意图”、“规则”等等人工智能方面的概念,否则很可能只是一个“意图”,形成不了“反应”。
2005-07-10 18:56:00 | [匿名用户:pubb]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
Continue...
2005-07-04 15:01:00 | [匿名用户:seac]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
现实世界中是谁让我们知道鸡块变成金黄色了?
加一个上帝God类吧
2005-06-26 16:12:00 | [匿名用户:香蕉]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
好东西,期待下文
2005-06-25 11:36:00 | [匿名用户:cmic]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
楼主的文章开了个很不错的头,不管解决的方法如何,效率是最重要的,OO之所以成功是本身并没有很多效率的损失。查询虽然简单直观,但效率不高。可能用线程睡眠/唤醒机制效率会比较高。如果鸡腿发黄,设置一个信号灯,唤醒“捞鸡腿”线程。
2005-06-24 17:13:00 | [匿名用户:walkdan]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
好文,期待中……
2005-06-24 16:19:00 | [匿名用户:farrio]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
可能我对oo的理解不对。
oo里面,类表示得是一个概念,而不一定非得是一个显示世界的事务。
我们的程序,并不是对现实世界的模拟。而是在于对问题的恰当分析和建模。并实现这个模型。这个模型并不一定在现实世界中有着物理的对应实体。

智能体我最早听说是在人工智能上面。现在发展的真快,都发展到编写一般程序这个阶段了。
我对agent知道的不多,不过,从历史上来看这会不会又是一个昙花一现的东西?当然,oo也被人这么说过。
2005-06-24 16:01:00 | [匿名用户:joe]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
不错不错,期待下文~~!
2005-06-23 13:30:00 | [匿名用户:Grily]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
呵呵,精典好文!!!
畅快!老兄,一出来就来了这么一块好砖!真是出手不凡啊你!继续期待!
2005-06-22 10:32:00 | [匿名用户:AdamBear]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
让我耳目一新,期待下篇。
2005-06-21 19:06:00 | [匿名用户:goooder]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
应该是人启动一个线程,定时去扫描鸡块的颜色,如果全部鸡块的颜色都足够接近金黄色——至于是否会变成黑色要看是否记得定时把鸡块翻面——那么就可以起锅了。
2005-06-21 13:31:00 | [匿名用户:jiangsheng]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
非常好的文章
2005-06-21 09:25:00 | [匿名用户:James]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
很感兴趣,继续加油,期待所有的后续文章
2005-06-21 09:16:00 | [匿名用户:fans1]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
值得期待
2005-06-21 09:02:00 | [匿名用户:xingzhi]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
"Aspect是技术/艺术,而Agent是思想"这话有些毛病。

写得还不错!
2005-06-20 21:36:00 | [匿名用户:chenge]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
期待已成现实,顶!
2005-06-20 17:40:00 | [匿名用户:baihmpgy]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
^_^,先顶个先

支持,期待下文
总算看到LEO了
2005-06-20 17:23:00 | [匿名用户:Bryan.Meng]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
不是一般的感兴趣 期待下文
2005-06-20 14:56:00 | [匿名用户:progame]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
To huangyi:

AOP是两个东东的缩写, 一个是Agent Oriented Programming, 一个是Aspect Oriented Programming。俺的文章主要是围绕着Agent Oriented Programming而展开。 但是比较有意思的地方是, Agent Oriented Programming在.Net平台上实现的时候,借用了Aspect Oriented Programming这种技术。这再次说明了一点: Aspect是技术/艺术,而Agent是思想。
2005-06-20 14:04:00 | [匿名用户:LEO]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
好文,期待后面的
2005-06-20 12:55:00 | [匿名用户:hkbarton]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
另外 AOP到底是
Agent Oriented Programming 还是
Aspect Oriented Programming

??
2005-06-20 11:30:00 | [匿名用户:huangyi]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
我想解决问题的关键应该是
1、 让有智能的物体能获得自主控制权,这个是多线程了
2、 建立一个环境对象,保存物体的一些状态信息,每个物体的公开状态发生改变就通知环境,有智能的物体也可以去查询环境对象 从而自主决定自己采取的行为

不过真的做起来,想想还真是件麻烦的事情
2005-06-20 11:26:00 | [匿名用户:huangyi]
#re: 白话面向智能体编程(Agent Oriented Programmig, AOP)之二 编辑
通俗易懂,文笔流畅:)
2005-06-20 10:29:00 | [匿名用户:开心就好]
对不起,目前本随笔不允许发表新评论.

Powered by: Joycode.MVC引擎 0.5.1.8