AspectJ: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
FrescoBot (discussione | contributi)
m Bot: accenti e modifiche minori
Riga 15:
Gli advice sono degli insiemi di istruzioni che vengono eseguite quando un certo pointcut diventa valido. E' importante notare che un advice può contenere esso stesso la definizione del pointcut che lo attiva. Un advice nella sua esecuzione può accedere ad eventuali informazioni sui join point che lo compongono che il pointcut può fornirgli. Sempre con riferimento alla metafora del teatro, gli advice definiscono cosa fanno gli spettatori sul palcoscenico.
 
===Aspect===
Le unità elementari dell'OOP sono gli oggetti, raggruppati in classi; le unità fondamentali dell'AOP sono gli aspetti.
 
Un aspetto normalmente contiene uno o più pointcut e uno o più advice, oltre a metodi e attributi, come le normali classi. Un aspetto modella una certa 'problematica trasversale' (cioè comune a più oggetti) del problema da risolvere; per esempio, poniamo di dover effettuare uno stesso controllo sui valori di input su più metodi appartenenti a classi differenti. Supponendo che tali oggetti non siano legati tra loro da relazioni di ereditarietà, nell'OOP si dovrebbe implementare tale controllo in ogni classe; nell'AOP è invece sufficiente implementare un unico aspetto che abbia un pointcut definito come un OR logico tra un insieme di join point che corrispondono all'esecuzione dei metodi che ci interessano, che contenga al suo interno un advice che restituisca un errore se gli argomenti del metodo eccedono i valori prefissati.
 
===AspectJ in dettaglio===
====Join points====
Un join point può essere, ad esempio, la chiamata di un metodo; in AspectJ, un join point che viene attivato dalla chiamata del metodo void faiqualcosa(int a), si scrive come:
Riga 86:
 
esso corrisponde a un oggetto appartenente alla classe A1 che, nel suo codice, effettui una chiamata di un metodo void wait() di un oggetto appartenente alla classe B2; detto oggetto viene identificato con bd; ac, invece, si riferisce all'oggetto che effettua la chiamata. <br />
E'È anche possibile definire un pointcut come un'unione di due join point: tale poincut diventerà 'valido' quando l'esecuzione del programma raggiungerà uno qualsiasi (nella definizione si usa l'OR logico) dei join point specificati. Ad esempio:
 
pointcut pt() : call(void calcola()) || execution(int moltiplica(int,int))
Riga 119:
pointcut pi() : within(java.sql.*);
 
denota l'insieme dei join point generati dal codice che è parte del package java.sql; analogamente, wthincode denota l'insieme dei join point generati da codice che è parte di un certo metodo o di un certo costruttore. E'È quindi possibile definire un altro pointcut pi2 come
 
pointcut pi2() : withincode(void insert(Object o));
Riga 299:
}
 
Questa istruzione aggiunge alla classe Game un metodo score() pubblico. E'È anche possibile aggiungere dei costruttori agli oggetti, ad esempio si può scrivere
 
public Game.new(String s ) {