  Design patterns are distilled from many real systems to catalog common
programming practice. However, some object-oriented design patterns are
distorted or overly complicated because of the lack of supporting programming
language constructs or mechanisms. For this paper, we have analyzed several
published design patterns looking for idiomatic ways of working around
constraints of the implementation language. From this analysis, we lay a
groundwork of general-purpose language constructs and mechanisms that, if
provided by a statically typed, object-oriented language, would better support
the implementation of design patterns and, transitively, benefit the
construction of many real systems. In particular, our catalog of language
constructs includes subtyping separate from inheritance, lexically scoped
closure objects independent of classes, and multimethod dispatch. The proposed
constructs and mechanisms are not radically new, but rather are adopted from a
variety of languages and programming language research and combined in a new,
orthogonal manner. We argue that by describing design patterns in terms of the
proposed constructs and mechanisms, pattern descriptions become simpler and,
therefore, accessible to a larger number of language communities. Constructs
and mechanisms lacking in a particular language can be implemented using
paradigmatic idioms.
