June 2002:
(updated May 2003)

The Tool Evolution Strategy of the Demeter Team

Following Alistair Cockburn (see his book on Agile Software
Development), we view software development as a group game, 
which is goal seeking, finite and cooperative.
We work together with our sponsors to produce working
and useful systems.

Our mission is described at

The goal we seek is better separation of concerns.
The game is finite from the point of each student (undergraduate or graduate
student) who participates and from the point of view of each project
which is funded for a finite time. But from the perspective
of the Demeter Team, the game is "infinite" 
(for the next 15 years and hopefully much longer)
in that each game that finishes should set the stage for the next game.

Currently we have three tools that we support:


DJ and DAJ are built on the AP Library

Our current plan is to stop further development of DemeterJ
and put the most useful features of DemeterJ into DAJ.

DemeterJ has served its purpose very well and introduced
several innovations on top of the older Demeter/C++.
But DemeterJ uses a non-standard programming language for
Adaptive Programming. In DAJ we found a way to express 
many of those capabilities just using a small extension
to AspectJ. We basically introduce two new declarations
in AspectJ: traversal declarations (replacing the adaptive methods
of DemeterJ) and strategy declarations.

DAJ will get the following capabilities:

1a. Declare traversal and strategy.
    Implemented using the AP Library.
1b. Declare point cuts using type patterns that involve traversal strategies.
    (AspectJ currently does not support named type patterns,
    only named pointcuts. In collaboration with: Haiyang Gao
2. Use class dictionaries and generate a parser and a print visitor.
3. Generate the other visitors that DemeterJ supports (DisplayVisitor, etc.).
4. Use XML schemas and generate code a la JAXB.
5. Use AspectJ as the weaver rather than the weaver currently in DemeterJ.
6. Any legal Java or AspectJ program will be a legal DAJ program.

DAJ is implemented using good separation of concerns at the cost
of some minor user inconvenience. The DAJ implementation 
extends the AspectJ language with four kinds of declarations
but it does so without depending on the internals of the AspectJ
compiler. It only uses the published AspectJ language features.	
The AspectJ Team can modify there compiler anyway they want
provided they maintain the interface.

The user inconveniences are:

1. DAJ users must put traversal-related concern declarations in separate
   files called *.trv. 
2. There is no traversal pointcut traversal(t) available for traversal t.
   Instead users must use call( * t(*)) and make sure t is not
   used outside the traversal.

While we gradually replace DemeterJ, we want to keep DJ around for the
following reasons:

1. DJ provides for a quick introduction to programming traversal-related
   aspects just using ordinary Java.
2. DJ allows for easy prototyping and testing of ideas, before they
   will be added to DAJ.
3. DJ allows for dynamic adaptability not available in DAJ. DJ and
   DAJ can be used together in the same program.

Our plans for Eclipse (http://www.eclipse.org/):

The AspectJ Team is developing a plug-in for Eclispe.
We hope to build on that plug-in and add the DAJ specific capabilities:

Given a class graph in textual form (in black), we can highlight

1. the scope of a traversal (in red) 
2. the scope of a behavior specification 
   (traversal (in red) and visitor nodes (in blue) and edges (in green))

in this class graph.

If Eclipse has support for UML class diagrams, we can display the scope
of a traversal graphically in the UML class diagram. 

Johan Ovlinger's tool on Aspectual Collaborations
is also planned to be added to the Demeter tools.