What is Aspect-Oriented Programming and why is it important?
Aspect-oriented programming offers a new set of language features to improve modularity. These features fall into two categories: open classes (to inject new members into existing classes) and advice (transforming computations by intercepting events). Conceptually, one can think of a piece of advice as observing the execution of a base program: when certain patterns of events occur, that triggers the execution of some extra code in the advice. The most popular implementation of these ideas is an extension of Java called AspectJ. Apart from AspectJ, there is a rapidly growing number of aspect-oriented languages emerging from the research community, including Alpha, Aspect#, Demeter/J, JAsCo, Loom.NET, and many others. Indeed, the paradigm of aspect-orientation poses several interesting challenges for programming language researchers, ranging from questions of semantics, through language design, to optimisations and safety analyses.