AspectJ: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m Bot: numeri di pagina nei template citazione e modifiche minori |
m Correzione ortografica |
||
Riga 48:
get ( int A.numero )
set (byte B.valore )
Riga 64:
adviceexecution()
Ci sono anche altri tipi di join point in aspectj, ma visto che il linguaggio è ancora in evoluzione, qui ci si è limitati a descrivere solo quelli più frequentemente usati, che probabilmente saranno presenti anche nelle future versioni di aspectj, successive alla versione 1.1 cui l'autore fa riferimento.
In aspectj esistono inoltre delle espressioni che permettono di definire degli insiemi di join point;
l'espressione
Riga 166:
}
Bisogna ricordare che in java un metodo può terminare regolarmente oppure lanciando un'eccezione: aspectj permette di distinguere questi due casi.
Si veda il seguente codice:
Riga 177:
}
quest'altro verrà eseguito solo se il metodo faiQualcosa ha lanciato un'eccezione.
Inoltre un advice del tipo after (..) returning può avere a disposizione il dato che il metodo contenuto nel poincut restituisce, ad esempio è possibile scrivere
after (int a) returning : call(int moltiplica(int,int)) {
// qui andrebbe il codice da eseguire ..
// che ha accesso alla variabile int a
// contenente il valore restituito da int moltiplica
}
Riga 193:
===Aspetti===
Un aspetto modella una problematica trasversale dell'applicazione. Può contenere al suo interno definizioni di pointcut, advice, attributi e metodi, implementare un'interfaccia od estendere una classe; il viceversa ovviamente non vale.
Esistono aspetti astratti e aspetti concreti, esattamente così come esistono classi astratte e classi concrete; però, a differenza dell'OOP, nell'AOP un aspetto concreto non può estendere un altro aspetto concreto, ma solo un aspetto astratto.
Un esempio è il seguente:
Riga 296:
In aspectj un aspetto può alterare la struttura stessa degli oggetti aggiungendo ad essi metodi, attributi e costruttori oltre a quelli che già possiede. Bisogna però fare attenzione a non creare conflitti: i metodi, i costruttori e gli attributi che un aspetto aggiunge ad un oggetto non devono sovrapporsi a metodi, costruttori e attributi che l'oggetto già ha. In parole povere, un aspetto può aggiungere dei metodi, degli attributi o dei costruttori, purché non siano già definiti dall'oggetto stesso.
La sintassi delle inter-type declarations è molto semplice: la dichiarazione
public int Game.time;
aggiunge un attributo di tipo intero e di nome 'time' alla classe Game, mentre
Riga 302:
aggiunge un attributo di tipo stringa name alla classe Ship. È importante notare che questo attributo è stato dichiarato come privato dall'aspetto, e quindi questo attributo sarà visibile solo dai metodi e dagli advice dell'aspetto, ma non dai metodi della classe Ship.
public int Game.score () {
// codice che ritorna il punteggio del gioco...
}
Riga 312:
}
per far sì che Game abbia un costruttore che accetta come parametro
== Note ==
|