Title: Principles of Aspect-Oriented Programming Abstract: A complex software system can be viewed as a combined implementation of multiple concerns such as business logic, performance, data persistence, logging and debugging, authentication, security, multithread safety, error checking, and so on. We can broadly classify these requirements as core module-level requirements and system-level requirements. System-level concerns may cross-cut several module-level concerns, for example, a storage-management concern affects every stateful business object. Although crosscutting concerns span over many modules, current implementation techniques tend to implement these requirements using one-dimensional methodologies, forcing implementation mapping for the requirements along a single dimension (logically dividing into modules core concerns) leading to code tangling and scattering. Aspect Oriented Programming (AOP) strives to cleanly separate concerns to overcome problems of tangling and scattering in a modularised fashion. AspectJ is a general-purpose aspect-oriented Java extension and uses Java as the language for implementing individual concerns; it specifies extensions to Java for weaving rules. These rules are specified in terms of pointcuts, join points, advice,and aspects. Join points define specific points in a program's execution, a pointcut is the language construct that specifies join points, advice defines pieces of an aspect implementation to be executed at pointcuts, and an aspect combines these primitives.