De lo que he podido entender de la documentación que he leído acerca de agentes, y acerca de JADE.
Un Agente es un objeto que actua siguiendo uno o varios comportamientos. Al objeto Agent se le añaden objetos Behaviour, los cuales llevan programado la lógica de un algorismo concreto, y se puede comportar cómo un SimpleBehaviour o un CyclicBehaviour, ejecutándose una sola vez durante la vida del agente o ejecutándose repetidamente, respectivamente. En código, y de manera esquemática seria algo cómo:
public class NuestroAgente extends Agent
{
...
protected void setup()
{
//inicializar variables, crear mensajes ACL
addBehaviour(new SmartBehaviour(this));
...
}
private class SmartBehaviour extends SimpleBehaviour
{
...
public void action()
{
//lógica del algorismo que se debe ejecutar
}
}
}
Como un Agente lleva asociados comportamientos que debe utilizar - la classe Agent puede tener varios Behaviours, en la jerga se llama pool de Behaviour - se pueden implementar dentro de la classe agente que hayamos creado.
El método action() es el encargado de ejecutar los pasos del comportamiento del agente, mientras que el método setup() se encarga de inicializar variables de estado que pueda usar un agente.
Habeis leído algo de ACL ¿qué es? Pues simplemente hace mención a la classe ACLMessage que se encarga de gestionar los mensajes que se van a pasar los agentes entre si.
Con esto, y sabiendo que un Agente se comporta como un Thread - siempre está ahí hasta que lo matas - el estilo de programación cambia bastante. De usar simples classes controladoras, por las que pueda pasar el flujo importante de una aplicación, podemos tener varios objetos Agente pululando y ejerciendo el control de la aplicación o código servidor o cómo gusten.
¡Continuará! :D