
In order to always improve the modularization and the reuse of programs source code, Programming paradigms never ceased to be more and more abstract models. Object-Oriented Programming have shown very powerful abilities to modularize vertical concerns into single entities. Packages, classes, and methods all help programmers to encapsulate concerns into single entities. But although these methodologies can't successfully encapsulate horizontal concerns, also called crosscutting concerns, because they exist in many parts of the program.
So we can all ask ourselves: what will be the programming paradigm of tomorrow ?
In Object-Oriented Programming, classes are often polluted by cross-cutting concerns (also called technical concerns) tangled with basic functionalities (also called the business logic concern). These cross-cutting concerns can by various: transactions, security, logging, persistence, session, etc.
Figure 1.2. In OOP, the business logic has strong dependencies with technicals technical modules addresses.

This pollution has many symptoms:
In software engineering, the programming paradigms of aspect-oriented programming (AOP) attempt to aid programmers in the separation of these cross-cutting concerns. AOP is defining all mechanisms for:
An aspect has the following anatomy:
The joinpoint notion provides all the mechanisms to identify patterns in the program flow.
A pointcut is a logical composition of joinpoints.
Advices represents the injected code into poincuts. There are three kinds of advices:
Aspects can declare attributes, methods, constants and constructors that are owned by other types. These are called inter-type declarations.