Mechanisms for defining and composing abstractions are essential elements of programming languages. They allow programs to be composed from smaller units, and they support design styles that proceed by decomposing a system into smaller and smaller sub-systems.
The abstraction mechanisms of most current programming languages --- subroutines, procedures, functions, objects, classes, modules and interfaces --- can all be thought of as fitting into a generalized procedure call model. The design style they support is one of breaking a system down into parameterized 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. Failure handling, persistence, communication, replication, coordination, memory management, real-time constraints, etc., are aspects of a system's behavior that tend to cut-across groups of functional components. While they can be thought about and analyzed relatively separately from the basic functionality, programming them using current component-oriented languages results in spreading the aspect code through many components. 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. It increases the dependencies between the functional components. It distracts from what the components are supposed to do. It introduces numerous opportunities for programming errors. It makes the functional components less reusable. In short, it makes the source code difficult to develop, understand and evolve.
Aspect-oriented programming is a promising idea that could reduce the problem of code tangling, and therefore improve the quality of software. At ECOOP'97, the first AOP workshop brought together a number of researchers interested in aspect-orientation. At ECOOP'98, during the second AOP workshop the participants reported on progress in some research topics and raised more issues that were further discussed.
In this year's AOP workshop, we intend to discuss the questions that were raised, and to review the progress in some research topics that emerged in the previous workshops.