This is an example about the usage of strategy types. How does this look? -- Karl This project is in: http://www.ccs.neu.edu/research/demeter/course/f97/projects/object-equiv See README-project for context. An adaptive program is best written in terms of an abstract strategy graph (a strategy "type") which describes the important connections which must exist in a class graph used to instantiate the program. The adaptive program type is instantiated in two phases: In a first phase paths in the abstract strategy graph which correpond to strategies used in the program are mapped into concrete strategies. A name map may be used. In a second phase, a class dictionary is provided together with a name map (may be the identity map) to instantiate the program completely. The object-equivalence checker is written in terms of the following abstract strategy graph: -> Cd_graph Adjacency -> Adjacency Subclass -> Adjacency Construct_ns -> Vertex_List Vertex -> Labeled_vertex_List Labeled_vertex -> PartCluster_List -> PartCluster -> Vertex_Comma_List -> Vertex -> Cluster Labeled_vertex It is interesting to note that Doug Orleans uses "Subclass" as a class in the demjava.cd while here we use "Subclass" as a class-valued variable which is mapped to a concrete class "Vertex". The abstract strategies (paths in the abstract strategy graph) are mapped as follows to concrete strategies (I list the strategies in the order they are used in the program): name map: Subclass ---> Vertex, identity otherwise abstract: -> Cd_graph Adjacency -> Adjacency -> Subclass concrete: -> Cd_graph Vertex bypassing {-> *,source,*, ->*,construct_ns,*} abstract: -> Cd_graph Adjacency -> Adjacency -> Construct_ns concrete: same abstract: -> Cd_graph Adjacency concrete: same abstract: -> Cd_graph Adjacency -> Adjacency -> {Subclass, Construct_ns} concrete: -> Cd_graph -> {Vertex, Construct_ns} bypassing {-> *,construct_ns,*, ->*, source,*} etc. Note that the abstract strategy graph does not mention any part names. Except for the terminal class parts, the adaptive program is "part-free". The class dictionary used for the final instantiation is in the one used in the project.