AspectJ: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
LauBot (discussione | contributi)
m Bot: passaggio degli url da HTTP a HTTPS
FrescoBot (discussione | contributi)
m Bot: numeri di pagina nei template citazione e modifiche minori
Riga 9:
 
== Storia ==
L'estensione AspectJ venne sviluppata a partire della fine degli anni '90 presso il laboratorio [[Xerox Palo Alto Research Center|Xerox PARC]], dietro la guida di [[Gregor Kiczales]], co-autore nel 1996 del primo paper che descrive la programmazione orientata agli aspetti<ref>{{Cita pubblicazione|nome=G.|cognome=Kiczales|data=1996-12-01|titolo=Aspect-oriented programming|rivista=ACM Computing Surveys (CSUR)|volume=28|numero=4es|ppp=154|accesso=2018-10-21|doi=10.1145/242224.242420|url=https://dl.acm.org/citation.cfm?id=242224.242420}}</ref>. La prima release pubblica dell'estensione risale al 2001<ref>{{Cita pubblicazione|nome=Gregor|cognome=Kiczales|data=2001-06-18|titolo=An Overview of AspectJ|editore=Springer-Verlag|pp=327–353327-353|accesso=2018-10-21|url=https://dl.acm.org/citation.cfm?id=646158.680006|nome2=Erik|cognome2=Hilsdale|nome3=Jim|cognome3=Hugunin}}</ref>.
 
==Concetti base==
Riga 27:
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==
Riga 47:
indica l'esecuzione di un qualsiasi blocco catch(IOException e) { .. } che gestisce un'eccezione di tipo IOException.
 
get ( int A.numero )
set (byte B.valore )