Elemental Design Patterns : A Logical Inference System and Theorem Prover Support for Flexible Discovery of Design Patterns

Previous approaches to discovering design patterns in source code have suffered from a need to enumerate static descriptions of structural and behavioural relationships, resulting in a finite library of variations on pattern implementation. Our approach differs in that we do not seek to statically encode each pattern, and each variant, that we wish to find. Rather, we encode in a formal denotational semantics a small number of fundamental OO concepts ( elemental design patterns ), encode the rules by which these concepts are combined to form patterns( reliance operators ), and encode the structural/behavioral relationships among components of objects and classes ( rho-calculus). A logical inference system then is used to reveal large numbers of patterns and their variations from this small number of definitions. Our system finds patterns that were not explicitly defined, but instead are inferred dynamically during code analysis by a theorem prover, providing practical tool support for software construction, comprehension, maintenance, and refactoring.

[1]  Christopher Alexander Notes on the Synthesis of Form , 1964 .

[2]  Ralph E. Johnson,et al.  Creating abstract superclasses by refactoring , 1993, CSC '93.

[3]  Complex associations: abstractions in object-oriented modeling , 1994, OOPSLA '94.

[4]  Walter Zimmer,et al.  Relationships between design patterns , 1995 .

[5]  Ivan Moore,et al.  Automatic inheritance hierarchy restructuring and method refactoring , 1996, OOPSLA '96.

[6]  Kent L. Beck Smalltalk best practice patterns , 1996 .

[7]  Martín Abadi,et al.  A Theory of Objects , 1996, Monographs in Computer Science.

[8]  Marco Meijers,et al.  Tool Support for Object-Oriented Patterns , 1997, ECOOP.

[9]  Dirk Riehle Composite design patterns , 1997, OOPSLA '97.

[10]  Bobby Woolf The Abstract Class Pattern , 1997 .

[11]  Wolfgang Pree,et al.  Design Patterns for Object-Oriented Software Development , 1994, Proceedings of the (19th) International Conference on Software Engineering.

[12]  Bobby Woolf The Object Recursion Pattern , 1998 .

[13]  Jim Coplien C++ Idioms , 1998, EuroPLoP.

[14]  Forrest Shull,et al.  AN INDUCTIVE METHOD FOR DISCOVERING DESIGN PATTERNS FROM OBJECT-ORIENTED SOFTWARE SYSTEMS , 1998 .

[15]  Jan Bosch,et al.  Design Patterns as Language Constructs , 1998, J. Object Oriented Program..

[16]  Oscar Nierstrasz,et al.  Finding refactorings via change metrics , 2000, OOPSLA '00.

[17]  Mel O Cinn eide Automated application of design patterns: a refactoring approach , 2001 .

[18]  Jason McC. Smith,et al.  Elemental Design Patterns: A Link Between Architecture and Object Semantics , 2002 .