AOSD.net
Journal · Development

The Evolution Of Aspect-Oriented Software Development AOSD

Why object-oriented techniques weren't enough — and how a new paradigm grew out of them to tame cross-cutting concerns.

Illustration of software paradigms evolving like a branching tree
From procedural roots to aspects — each paradigm grew to fix the last one's blind spots.

Software developers are confronted with additional requirements aside from the functional requirements of the program. The non-functional requirements — robustness, reusability, evolvability, performance, and adaptability — cannot be deemed any less important. They determine, to a large extent, the quality of the software as users actually experience it. Meeting both the non-functional and the functional requirements therefore calls for a software development language that takes care of this need throughout the entire lifecycle of software development.

01Object To Aspect-Oriented Development

From the earlier processes of procedural and structural design, today's software development uses object-oriented techniques for modeling — encapsulation, inheritance, delegation, polymorphism.Where the story starts
Diagram of object-oriented classes and inheritance
Object-oriented programming is still the trend today.

The evolution of software development has introduced several useful techniques from the object-oriented toolbox to implement efficient modularization methods. But both practice and research findings show the same thing: these methods are not sufficiently able to fully modularize all the concerns of a complex program. Concerns like logging, synchronization, and recovery are systemic — they cross-cut the whole system rather than staying inside any one module. Left scattered, these complexities erode adaptability, reusability, maintainability, and other quality factors.

Aspect-oriented software development, as a new paradigm, was born from object-oriented development to give better modularization in software development. As an advanced method for the separation of concerns, it makes available specific concepts for cleanly modularizing cross-cutting concerns, which are then used in composing the program's components.

02Restructuring

Tangled threads being restructured into orderly strands
AOSD introduces a restructuring technique to solve old dead ends.

Software restructuring is crucial to software development. Recall the law of software evolution set down by Lehman: "As a program evolves its complexity increases unless work is done to maintain or reduce it."

Aspect-oriented software development introduces a restructuring technique to deal with the issues of cross-cutting concerns — by introducing aspects, a new abstraction mechanism, into a program's existing languages. AspectJ, for instance, is a restructuring of Java. With this addition, cross-cutting behaviour is no longer scattered across many modules; it lives in one place, by design.

03Cross-Fertilization

Two streams of light merging into one braided river
Cross-fertilization brings up new possibilities.

For aspect-oriented software development to succeed, current software programs must be translated into their aspect-oriented equivalents through continual rephrasing. At the scale of industrial software, automated support becomes essential for three important activities: aspect mining, aspect introduction, and aspect evolution. Software development techniques, in short, need to keep evolving to cope with ever-changing software requirements.

The takeaway: the evolution of aspect-oriented software development is the story of a technique that grew, step by step, to better handle the modularization requirements of real software.

Next in the journal

Many Ways The AOSD Has Been Put Into Use

Read it