Demeter/Java ( DARPA supported EDCS project)

Demeter/Java and AP Studio Resources .

Demeter/Java and AP Studio Success Stories .

Maintaining and evolving Java programs is very time consuming. This page informs you how to write your Java programs in a much more reusable form, called the adaptive form. You reuse all your Java knowledge and learn a design language on top of Java. The two important features of the design language are: Traversals and Visitors. Demeter/Java enforces correct use of the Visitor Design pattern in complex applications. The Visitor Design pattern is directly supported in the executable design language which is on top of Java.
How to use my book on adaptive programming (AP) to learn adaptive programming in Java is described in AP Book Reuse for Java. A simple example comparing the book notation with the Demeter/Java notation written by Doug Orleans, the developer of Demeter/Java.
A new 2 page introduction to adaptive programming in Java .
Poster about adaptive programming with Demeter/Java .
Answers to recent messages about Demeter/Java .
Examples of Demeter/Java programs and translation to Java.
The Demeter Method adapted to Demeter/Java .
Demeter/Java for Demeter/C++ users .
HOME PAGE OF 1997 NTU COURSE using Demeter/Java .
Success with visitor/traversal style programming in conventional C++ environment at Hewlett-Packard .
Design Issues and Decisions behind Demeter/Java: explains the rationale behind the many decisions. .
Demeter/Java Copyright Notice .
Demeter Home Page .

Conceptual papers

  Foundations of Software Engineering paper on context objects

  A comparison between Demeter/Java and context objects:

  Linda Seiter's PhD thesis

  Reflection paper

The Motto behind Adaptive Programming:

The more ambitious plan may have more chances of success
provided it is not based on mere pretension
but on some vision of the things beyond those immediately present.

George Polya in How To Solve It


Adaptive Programming (AP) has evolved through two object-oriented programming languages: The predecessor of Common Lisp (Flavors) and C++. AP is now moving to Java. AP provides a high-level interface to object-oriented programming through class dictionaries and adaptive behavior specifications. AP allows you to specify the strategy behind your programs while the detailed programs are produced automatically from an instantiation of the strategy. This leads to programs which are easier to evolve and maintain. Demeter/Java is implemented as a preprocessor to Java which requires you to learn a small extension language to Java. You use your favorite Java development system to develop your programs. Fortunately, the extension language is now even smaller than in Demeter/C++ because of the use of context objects. Demeter/Java uses classes and their relationships also to express behavior modifications. The extension language has a very Java-like syntax. Another nice feature of Demeter/Java is its direct support for programming with the Visitor Pattern described in the Design Pattern book by Gamma et al.

Guy Steele, in one of his Java presentations, used the quote

A data structure is just a stupid programming language. (R. Wm. Gosper)

AP takes this point of view seriously. It even lets you define a syntax for the stupid programming language and it lets you implement the language in a structure-shy way.


While Java and the class libraries define an impressive programming system and Demeter is an add-on to Java and other object-oriented programming languages, Java and Demeter have many similarities:


AP is a generic technology with many different implementations. The Demeter Tools/C++ provide one possible implementation and Demeter Tools/Java will be another one. Demeter/Java is an abbreviation for Demeter Tools/Java. Demeter/Java offers the following improvements over Demeter Tools/C++:

This project is a DARPA/ITO-funded research effort.

Demeter Home Page .