我们在我的软件开发课上一直在学习Agent-Oriented-Programming,而我的教授是他的一个重要支持者,他一生都在使用它。
我的问题是从设计和实现的角度来看使用代理的真正优势/劣势。从我的教授的角度来看,Agent可以比通过普通的OOP方法更容易地重建非常复杂的操作。但在我看来,代理在复杂环境中编程同样麻烦。它们受各种并发,时序和数据完整性问题的影响。从编码员的角度来看,代理代码相当复杂,比普通的OOP代码更难理解。
有人能让我了解软件代理在实际开发中的看法以及学术活动之外的优势/劣势是什么?
答案 0 :(得分:10)
在AI中使用术语“代理人”(这很可能是您所指的,这是最常见的学术参考)实际上是“代表用户行事的软件程序”的同义词。看到代理商更具吸引力,因为它是一个有点人格化的术语,是用户的代理人;此外,它往往与更高阶的功能相关联(规划代理,学习代理,自治代理等)。更多关于维基百科上该术语的起源:
http://en.wikipedia.org/wiki/Software_agent
鉴于此,术语“代理人”更多地是关于软件的目的和类型,而不是它的编程方式。 OOP更多地与技术设计/实施方式有关。
因此使用OOP原则设计代理没有任何问题。这两个主题并不相互排斥。
另外,请记住(正如上面提到的一些评论,我同意):在学术界使用“代理人”是一个更浪漫化的术语;大多数软件代表某些用户,因此在很多方面都有代理功能。它只是在一天结束时的软件,如果你从我们的集体词典中删除了“代理”一词,你就不会惩罚纯软件设计/实现的能力。您将在论坛中看到关于面向代理的编程的相同争论的元素,例如:
答案 1 :(得分:0)
我在所有答案中都缺少的东西,以及我认为面向代理/行为者的编程与“常规” OOP之间最重要的区别是:
AOP是OOP之上的更高层或“级别”(通常使用OOP来实现)。
AOP的全部目的在于简化并发(多线程)编程,并具有定义明确的标准方式(针对每种语言或框架),从而使其结构更加清晰。并发功能是在AOP框架或语言中实现的,而OOP中的多线程则留给开发人员使用,并且可以按照他/她喜欢的任何方式来实现(其中一个可以是AOP:P)。
具有某些实现允许开箱即用的语言的示例:NI Labview和Erlang的较新版本。 Wiki有更多示例。
凭直觉,我通常会猜测:您添加到软件中的功能越多,使用AOP所带来的收益就越大。如果不使用AOP(或其他一些多线程框架),则可能会遇到AOP已经为您解决的所有问题,例如:死锁,竞争条件,线程之间的低效率通信(事件队列) ,消息队列,数据队列等)。
(偶然的)面向演员的架构的一个很好的例子:互联网。因为它由同时运行的“代理”(节点/服务器/客户端)组成,并且可以容忍其他服务器和通信通道的故障。