GenVoca is tool developed by Don Batory for defining code constructs in a higher level than program code. In GenVoca, a module is specified by declaring the set of "layers" that make it up, where each layer defines an "aspect" of the module:
myFooContainer <list ofType(Foo) sorted persistent withIterators>Adding a layer in effect adds methods and/or adds arguments to existing methods. Layers can be mixed and matched in a very flexible way.
GenVoca creates C++ code.
One example was a tree data type whose memory allocation layer could be one of: a fixed array (for speed), a series of large RAM blocks (for large in-memory trees), and a full distributed memory system (for terabyte sized trees).
Papers
http://www.cs.utexas.edu/users/schwartz/Awards.html http://citeseer.ist.psu.edu/batory97composition.html The GenVoca Model of Software-System Generators http://csdl.computer.org/comp/mags/so/1994/05/s5089abs.htm terse description http://www.program-transformation.org/Transform/GenVoca A Distributed Architecture Definition Language: a DADL (mentions GenVoca and related work) http://www-db.stanford.edu/~burback/dadl/control.html
Personally, I prefer the idea of a tool over C++ templates for defining boilerplate classes. Templates don't really fit in a programming language. A sort-of mini-GenVoca where one could say that for this project we need vector<int>, vector<FooBar>, list<string>, and whatever else. The tool would create the code and compile it as a library. -- IanRae
Is there anything like GenVoca for java or is that uneccessery and if it is, what does java do to deal with layers. -- Maiken
This seems related to or perhaps even directly built on the idea of PolicyBasedClassDesign; ModernCeePlusPlusDesign has some details on this.
See also: AspectOrientedProgramming