When the requirements are given for a piece of software, they usually cover only a minor section of what the software should do and be. Aspect-Oriented Programming (AOP) provides a way to think about all the necessary, but not easily compartmentalized components of a software system.
