The definition of "aspect" has evolved over time.
It is difficult to make terms like cross-cutting, tangling, intermingling,
interleaving and cross-cutting precise.
The current working definition is (May 99, Gregor Kiczales):
> An aspect is a modular unit that cross-cuts the structure
> of other modular units.
>
> Aspects exist in both design and implementation. A
> design aspect is a modular unit of the design that
> cross-cuts the structure of other parts of the design.
> A program or code aspect is a modular unit of the program
> that cross-cuts other modular units of the program.
I like this "definition" because it is general and not
tied to OO. The first sentence is even applicable beyond
programming languages.
An earlier description of the concept, published in 1995,
http://www.ccs.neu.edu/research/demeter/biblio/dem-book.html
said (page 78):
An aspect is a unit that is defined in terms of partial
information from other units.
It used different words (unit was called view) but the idea was the same.
The partial information can be anywhere in the other modular unit
leading to cross-cutting between the modular units.
It is also useful to categorize language constructs for OO AOP.
The following is a very good summary of the current state of the art:
=============
An aspect is a unit that encapsulates state (roughly, variables),
behavior (roughly, methods),
and behavior enhancements in other units (roughly, weaves).
=============
See also:
http://www.ccs.neu.edu/research/demeter/biblio/context.html
where the concept of context classes is introduced. They
can modify other classes.
Many constructs qualify as aspects:
propagation patterns (Demeter/C++)
http://www.ccs.neu.edu/research/demeter/biblio/prop-pat1.html
IFIP '92
synchronization patterns
http://www.ccs.neu.edu/research/demeter/papers/publications.html
ECOOP '94
context objects
http://www.ccs.neu.edu/research/demeter/biblio/context.html
FSE '96
adjustments
http://www.ccs.neu.edu/home/mira/rondo.html
adaptive parameter passing
http://www.ccs.neu.edu/research/demeter/papers/publications.html
I-WOOOS'95
visitor objects (Demeter/Java)
http://www.ccs.neu.edu/research/demeter/biblio/demjava.html
http://www.ccs.neu.edu/research/demeter/DemeterJava/UserManual/
ICSE '97
adaptive plug-and-play components
http://www.ccs.neu.edu/research/demeter/biblio/components.html
OOPSLA '98
personalities
http://www.ccs.neu.edu/research/demeter/biblio/personalities.html
interaction graphs
http://www.ccs.neu.edu/research/demeter/biblio/interaction-graphs.html
OOPSLA '98 (demo)
-- Karl Lieberherr