This document discusses aspect-oriented programming (AOP) and how it addresses concerns that are not easily modularized in object-oriented programming (OOP). It defines key AOP concepts like aspects, pointcuts, and join points. It provides an example of using aspects to add logging functionality across components in a distributed digital library application. It also summarizes AspectJ, a popular aspect-oriented extension for Java, and provides an example aspect for method tracing.