Aspect-Oriented Programming

According to the AOP FAQ, Aspect-Oriented Programming is a methodology that "enables the modularization of crosscutting concerns". Crosscutting concerns, at least in my interpretation, are facets of a system which don't obviously fit into the two dimensions of Object-Oriented Programming: generalization and association/delegation. Aspects provide a third dimension or way of abstracting some behaviour out of the system so that they may be applied where they are needed regardless of where in the class heirarchy they live.

Here's a more lucid, albeit more dense, explanation of the motivations for AOP:

Separation of concerns is an important software engineering principle guiding all stages of a software development methodology. Traditional units of modularity in programming languages such as objects, functions, modules and procedures help in localizing concerns during software development, but some aspects involving more than one functional component such as synchronization, integrity control, persistency, and interaction fail to be neatly separated using traditional units of modularity. As a result, code relating to aspects are often expressed as small code fragments tangled and scattered throughout several functional components. Because of the way they cross module boundaries, it is said that aspects crosscut the program structure. Aspect-oriented programming [...] is a new programming methodology that enables the modularization of crosscutting concerns by supporting a new unit of software modularity -- aspects -- that provide encapsulation for crosscutting concerns. - ''MSc Project: Using Aspect-Oriented Programming in the design and implementation of synchronization code for Java multithreaded programs'', Rizos Sakellariou, http://www.cs.man.ac.uk/cnc/mscprojects/aspect/pedro.html

GedTheGreysHain - 11 Aug 2001