7

在我的软件开发课上,我们一直在学习面向代理的编程,我的教授是它的大力支持者,他一生都在使用它。

我的问题是从设计和实现的角度来看使用代理的真正优势/劣势。从我的教授的角度来看,代理可以比通过普通的 OOP 方法更容易地重新创建非常复杂的操作。但在我看来,Agent 在复杂环境中编程同样繁琐。它们受到各种并发、时间和数据完整性问题的影响。从编码人员的角度来看,代理代码相当复杂,比普通的 OOP 代码更难理解。

有人可以告诉我在实际开发中如何看待软件代理,以及学术活动之外的优点/缺点是什么?

4

2 回答 2

10

在 AI 中使用术语“代理”(这很可能是您所指的,它是最常见的学术参考)实际上是“代表用户行事的软件程序”的同义词。代理被认为更具吸引力,因为它是一个有点拟人化的术语,是用户的代理;此外,它往往与更高阶的功能相关联(代理计划、代理学习、自主代理等)。更多关于 Wikipedia 上该术语的起源:

http://en.wikipedia.org/wiki/Software_agent

鉴于此,“代理”一词更多地是关于软件的目的和类型,而不是它的编程方式。OOP 更多地与它的技术设计/实现方式有关。

因此,使用 OOP 原则设计代理没有任何问题。这两个主题并不相互排斥。

另外,请记住(正如上面提到的一些评论,我同意):在学术界使用“代理人”是更浪漫的术语;大多数软件代表某些用户行事,因此在许多事情上都有代理功能。归根结底,它只是软件,如果您从我们的集体词典中删除“代理”一词,您将不会惩罚纯软件设计/实施的能力。您将在专门针对面向代理的编程的论坛中看到同样的辩论元素,例如:

http://ootips.org/agent-orientation.html

于 2011-03-08T08:52:10.790 回答
1

我在所有答案中所缺少的以及我认为面向代理/演员的编程与“正常”OOP 之间最重要的区别是:

  • AOP 是 OOP 之上的更高层或“级别”(通常使用 OOP 实现)。

  • AOP 就是为了使并发(多线程)编程更容易,有一个定义良好的标准方法(每个语言或框架),因此使其结构更清晰。并发功能在 AOP 框架或语言中实现,而 OOP 中的多线程由开发人员决定,可以以他/她喜欢的任何方式实现(其中之一可能是 AOP :P)。

具有某些实现以允许开箱即用的 AOP 的语言示例:较新版本的 NI Labview 和 Erlang。Wiki 有更多示例。

直觉上我猜想一般来说:你添加到软件中的功能越多,你从使用 AOP 中得到的好处就越多。如果您不使用 AOP(或其他一些多线程框架),您可能会遇到 AOP 已经为您解决的所有问题,例如:死锁、竞速条件、线程之间的低效通信(事件队列、消息队列、数据队列等)。

(偶然的)面向参与者的架构的一个很好的例子:互联网。因为它由并发运行的“代理”(节点/服务器/客户端)组成,并且可以容忍其他服务器和通信通道的故障。

于 2018-08-15T09:26:12.323 回答