AOP includes programming methods and tools that support the modularization of concerns at the level of the source code, while “aspect-oriented software development” refers to a whole engineering discipline. Some concerns “beginning java programming the object oriented approach pdf across” multiple abstractions in a program, and defy these forms of implementation. All AOP implementations have some crosscutting expressions that encapsulate each concern in one place.
The difference between implementations lies in the power, safety, and usability of the constructs provided. For example, interceptors that specify the methods to intercept express a limited form of crosscutting, without much support for type-safety or debugging. An aspect can also make binary-compatible structural changes to other classes, like adding members or parents. Composition Filters and Adaptive Programming.
That means to change logging can require modifying all affected modules. Aspects become tangled not only with the mainline function of the systems in which they are expressed but also with each other. That means changing one concern entails understanding all the tangled concerns or having some means by which the effect of changes can be inferred. For example, a security module can include advice that performs a security check before accessing a bank account. That way, both the check and the places can be maintained in one place. Further, a good pointcut can anticipate later program changes, so if another developer creates a new method to access the bank account, the advice will apply to the new method when it executes. One can think of AOP as a debugging tool or as a user-level tool.