The Free On-line Dictionary of Computing (30 December 2018):
aspect-oriented programming
AOP
    (AOP) A style of programming that attempts to
   abstract out features common to many parts of the code beyond
   simple functional modules and thereby improve the quality of
   software.
   Mechanisms for defining and composing abstractions are
   essential elements of programming languages.  The design style
   supported by the abstraction mechanisms of most current
   languages is one of breaking a system down into parameterised
   components that can be called upon to perform a function.
   But many systems have properties that don't necessarily align
   with the system's functional components, such as failure
   handling, persistence, communication, replication,
   coordination, memory management, or real-time constraints,
   and tend to cut across groups of functional components.
   While they can be thought about and analysed relatively
   separately from the basic functionality, programming them
   using current component-oriented languages tends to result
   in these aspects being spread throughout the code.  The
   source code becomes a tangled mess of instructions for
   different purposes.
   This "tangling" phenomenon is at the heart of much needless
   complexity in existing software systems.  A number of
   researchers have begun working on approaches to this problem
   that allow programmers to express each of a system's aspects
   of concern in a separate and natural form, and then
   automatically combine those separate descriptions into a final
   executable form.  These approaches have been called
   aspect-oriented programming.
   Xerox AOP homepage
   (http://parc.xerox.com/csl/projects/aop/).
   AspectJ (http://AspectJ.org/).
   ECOOPP'99 AOP workshop
   (http://wwwtrese.cs.utwente.nl/aop-ecoop99/).
   (1999-11-21)