AspectJ: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
+F |
m Bot: accenti e modifiche minori |
||
Riga 14:
===Advice===
Gli advice sono degli insiemi di istruzioni che vengono eseguite quando un certo pointcut diventa valido.
===Aspect===
Riga 83:
pointcut pc(int i): call (void doSomething(int)) && args(i)
mette a disposizione dell'advice una variabile int i che sarà inizializzata al valore del parametro intero passato al metodo void doSomething(int n). Vale la pena notare che il pointcut definito qui sopra è formalmente una intersezione, ossia un and logico tra due insiemi di join point definiti dalle due espressioni call (void doSomething(int)) e args( int i): quest'ultima espressione indica tutti i join point
pointcut wait(A1 ac, B2 bd) : call(void wait()) && this(ac) && target(bd)
Riga 248:
alla riga 2 c'è la dichiarazione dell'aspetto. Gli aspetti possono essere privati o pubblici, esattamente come le classi, ma possono anche essere privilegiati ('privileged') oppure no: un normale aspetto rispetta il principio dell'information hiding, mentre uno privilegiato no. In parole povere, solo gli aspetti dichiarati come 'privileged' hanno la visibilità degli attributi e dei metodi privati di una classe, e di conseguenza solo gli aspetti privilegiati possono contenere al loro interno dei pointcut che nella loro definizione facciano riferimento a join point corrispondenti, per esempio, al get o al set di un attributo privato dell'oggetto o all'esecuzione di un metodo privato. L'aspetto in esame alla riga 2 viene dichiarato come un aspetto pubblico privilegiato.
Un aspetto, esattamente come qualsiasi altro oggetto, può
Nella riga 10 e 13 troviamo la definizione di due semplici pointcut, definiti tramite dei join point di tipo execution. Alla riga 16 e alla riga 18 ci sono due advice che vengono eseguiti, rispettivamente, prima e dopo il pointcut definito alla riga 10; nell'aspetto ci sono anche due advice (righe 29 e 31) che vengono eseguiti l'uno prima e l'altro dopo il pointcut definito alla riga 13. Come accade nelle classi, tutti questi advice hanno accesso alle variabili private dell'aspetto (definite nelle righe dalla 2 alla 15).
Riga 278:
creerà un aspetto ogni volta che il metodo stampa verrà chiamato.
Una caratteristica
declare precedence : Prestaz, Logging;
Riga 289:
====''Inter-Type declarations''====
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
La sintassi delle inter-type declarations è molto semplice: la dichiarazione
Riga 295:
aggiunge un attributo di tipo intero e di nome 'time' alla classe Game, mentre
private String Ship.name;
aggiunge un attributo di tipo stringa name alla classe Ship. È importante notare che questo attributo è stato dichiarato come privato dall'aspetto, e quindi
Public int Game.score () {
Riga 312:
*[http://www.eclipse.org/aspectj/ Home page progetto AspectJ]
[[
[[bg:AspectJ]]
|