面向代理编程AOP:Agent-oriented programming),是一种编程范型,这里软件的构造以软件代理英语Software agent的概念为中心。对比于拥有对象(提供具有可变形式参数的方法)作为核心的面向对象编程,AOP拥有外部指定的代理(具有接口和消息能力)作为核心。它们可以被认为是对象的抽象。交换的消息可以由接收“代理”,以特定于它的代理类的方法来解释。

历史

编辑

历史上,面向代理编程的概念,和软件围绕代理的概念为中心的想法,是Yoav Shoham英语Yoav Shoham在1990年于他的人工智能研究中介入的[1][2]。他的代理特定于自己的范型,因为它们就只有一个方法,具有一个形式参数。下面引述Yoav Shoham的1990年论文,论述在AOP和OOP之间的基本区别:

面向代理编程(AOP),可以被看作是特殊化了的面向对象编程。

OOP AOP
基本单元 对象 代理
定义基本单元状态的参数 无约束 信念,承诺,能力,选择 ...
计算的过程 消息传递和响应方法 消息传递和响应方法
消息的类型 无约束 通知,要求,提供,允诺,拒绝 ...
方法的约束 诚实,一致 ...

框架

编辑

有多个AOP框架,也叫做代理平台,实现了Shoham的编程范型。下面的例子展示基本的代理如何编程hello-world程序。

JADE

编辑

Java平台上的框架之一是JADE英语Java Agent Development Framework[3][4]。有运行代码的代理的一个非常基本的例子[5]

package helloworld;
import jade.core.Agent;

public class Hello extends Agent {
	
	protected void setup() { 
		System.out.println("Hello World. ");
		System.out.println("My name is "+ getLocalName()); 
	}
	
	public Hello() {
		System.out.println("Constructor called");
	}

}

作为JADE的AOP模型的核心的是支持标准FIPA英语Foundation for Intelligent Physical AgentsACL英语Agent Communication LanguageAPI

PADE

编辑

PADE(Python代理开发框架)[6]是用Python语言开发智能代理的Python包。这个框架遵循了FIPA及其ACL标准。

class AgenteHelloWorld(Agent):
    def __init__(self, aid):
        super(AgenteHelloWorld, self).__init__(aid=aid)
        display_message(self.aid.localname, 'Hello World!')

参见

编辑

引用

编辑
  1. ^ Shoham, Y. Agent-Oriented Programming (Technical Report STAN-CS-90-1335). Stanford University: Computer Science Department. 1990. 
  2. ^ Shoham, Y. Agent-Oriented Programming. Artificial Intelligence. 1993, 60 (1): 51–92. CiteSeerX 10.1.1.123.5119 . doi:10.1016/0004-3702(93)90034-9. 
  3. ^ JADE
  4. ^ Bellifeminee, Fabio; Agostino Poggi; Giovanni Rimassa. JADE: a FIPA2000 compliant agent development environment. Proceedings of the fifth international conference on Autonomous agents: 216–217. 2001. doi:10.1145/375735.376120. 
  5. ^ Rootdev. rootdev.nl. [18 September 2022]. (原始内容存档于2 July 2011). 
  6. ^ Python Agent DEvelopment framework — Pade 1.0 documentation. [2023-12-30]. (原始内容存档于2023-10-23). 


📚 Artikel Terkait di Wikipedia

反射式编程

functional and object-oriented programming: a short comparative study (页面存档备份,存于互联网档案馆) An Introduction to Reflection-Oriented Programming Brian Foote's

Objective-C

及其相關函式庫商品化販售,並在之後將公司改名為 StepStone。1986年,考克斯出版了一本關於 Objective-C 的重要著作《Object-Oriented Programming, An Evolutionary Approach》,書內詳述了 Objective-C 的種種設計理念。 1988年,斯蒂夫·乔布斯(Steve

生成器 (计算机编程)

all variables used in the generator int i; // our counter // place the constructor of our generator, e.g. // descent(int minv, int maxv) {...} // from $emit

模式匹配

1980–81 for teaching.  Warth, Alessandro, and Ian Piumarta. "OMeta: an object-oriented language for pattern matching (页面存档备份,存于互联网档案馆)." Proceedings of the

Visual C++名字修饰

pointers, regardless of storage class." 参见Thunk (object-oriented programming)(英语:Thunk (object-oriented programming)) 微软MSDN的《Viewing Decorated Names》 微软MSDN的《Using

Racket

團對專案開發方向重要的依據,在接下來的幾年中,PLT 團隊為 DrScheme 加入了教學用語言,例如 代數步進器、讀取-求值-輸出循環、constructor-based printer 和其他許多發明,推出了一套有應用價值的程式教學環境。 2001年,核心團隊(Felleisen, Findler