next up previous
Next: Parte II: la classe Up: Descrizione dettagliata delle parti Previous: Descrizione dettagliata delle parti


Parte I: le classi AgentID, MessageType e Message

Definire una classe AgentID le cui istanze contengono il seguente campo:

Definire poi una classe MessageType che permette di specificare il tipo di messaggio (performativa, si veda anche [5, Sezione 8.2.3]) creato (REQUEST, INFORM, REFUSE, QUERY-IF, QUERY-REF, AGREE, FAILURE, NOT-UNDERSTOOD, ecc.) contenente la dichiarazione di un inseme di costanti, una per ogni tipo di messaggio:

public class MessageType {
    [...]
    public static final int UNKNOWN = 0;
    public static final int REQUEST = 1;
    [...]
}
Si definisca un vettore (privato? pubblico? statico? non statico?) contenente per ogni tipo di messaggio definito la corrispondente nome in formato di stringa, facendo corrispondere il valore numerico con la posizione nel vettore stesso per una più facile estrazione. La classe deve contenere il seguente metodo:
public String getTypeName(int i)
che restituisce il corrispondente nome del tipo possato come parametro. Nel caso che il valore del parametro sia fuori del range degli indici del vettore definito sopra si restituisca "UNKNOWN".

Definire poi una classe Message le cui istanze contenengono i seguenti campi:

Per ogni classe (anche per la classe MessageType?) si definiscano gli opportuni costruttori. Per esempio, per la classe Message si definiscano i costruttori:

  1. public Message ()
  2. public Message(int type)
  3. public Message (int type, AgentID sender, AgentID receiver, String content)
  4. public Message (int type, AgentID sender, AgentID receiver, String content, Object extraArgument)
Il costruttore (1) crea l'oggetto inizializzando tutti i suoi campi a null (e il tipo con UNKNOWN), il costruttore (2) che specifica il tipo del messaggio mentre tutti gli altri campi sono inizializzati a null, il costruttore (3) inizializza l'oggetto mediante i valori dei parametri passati al costruttore stesso a parte il campo extraArgument che viene inizializzato a null, infine il costruttore (4) inizializza tutti i campi tramite i parametri passati al costruttore.

Si definiscano poi un metodo di tipo ``get'' ed uno di tipo ``set'', per ogni campo presente nelle classi AgentID e Message (e nelle classi che scriveremo in seguito!); ad esempio, per il campo sender della classe Message:

Si definisca, per ogni classe introdotta (anche per la classe MessageType?) e che introdurremo in futuro, il metodo

public String toString()
che restituisce una stringa che rappresenta l'oggetto stesso in formato stampabile su console. Ad esempio, se messaggio è una variabile che contiente un riferimento ad un oggetto di tipo Message, allora messaggio.toString() restituisce una stringa che stampata dovrebbe risultare qualcosa del tipo:
Type: REQUEST
Sender: (banditore, Christie's)
Receiver: (cliente, Aldo)
Content:
OFFERTA CORRENTE?
ExtraArgument:
null
Inoltre si definisca per la classe AgentID il metodo
public boolean equals(AgentID agentID)
che restituisce true se l'identificatore dell'agente passato come parametro ha lo stesso nome e appartiene alla stessa categoria dell'oggetto su cui è invocato il metodo, false altrimenti.

Si ricordi di scegliere (sapendo giustificarne il motivo) il tipo di visibilità (private? protected? public? default?) per ogni campo, metodo e classe.

Infine si definisca una classe ProvaMessaggio contenente un metodo main che effettui il test delle classi precedentemente definite.


next up previous
Next: Parte II: la classe Up: Descrizione dettagliata delle parti Previous: Descrizione dettagliata delle parti
Matteo Baldoni 2004-03-19