Abstract. Refinement concepts, such as procedural and data refinement, are among the most important ideas of software engineering. In this paper, we investigate the idea of design refinement, the process of refining a set of design patterns to arrive at application-specific design components, and ultimately, to system implementations. The approach also enables designers to refine a given pattern to arrive at more specialized versions of that pattern --sub-patterns-- thus enabling the creation of pattern hierarchies. We present three contributions: (i) We explore the concept of design refinement and consider what it means for such a refinement to be correct, in the sense of being faithful to the pattern being refined. (ii) We describe a two-part formalism for documenting patterns and subpatterns. A pattern contract captures the requirements and behavioral guarantees associated with a given pattern, while a subcontract captures the ways in which the pattern is specialized for use in a pa...
Jason O. Hallstrom, Neelam Soundarajan