This document discusses aspect oriented programming (AOP), which aims to address complexity and crosscutting concerns by encapsulating them into aspects. AOP allows concerns like logging, validation, profiling and security to be modularized. It works by identifying join points in a program where advice code can be inserted via a pointcut. Frameworks like AspectJ and Spring support AOP for Java, while .NET has options like Spring.NET and SharpCrafters. Demo applications are shown to illustrate AOP concepts in practice.