The term `pattern' is used frequently in the literature without a precise definition, or at best with a definition stipulated for the particular situation. We propose a definition below consistent with the history and usage of the term and based on the necessary characteristics of patterns in the area of human computer interaction.
The dictionary defines a pattern as ``a model or design or instruction according to which something is to be made.'' Alexander defines a pattern as follows:
"... the elements of this language are entities called patterns. Each pattern describes a problem which occurs over and over again in our environment, and then describes the core of the solution to that problem, in such a way that you can use this solution a million times over, without ever doing it the same way twice" [1, p. x,].Alexander[2, p267),] states that a pattern must have a name, and must be drawable.
Love[11, p 43,] views patterns as "design rules" that allow for successful design. To be successful the rules must not constrain the design unnecessarily or enforce unneeded uniformity. The object-oriented design and development community have embraced the notion of patterns. Object-oriented design and development technologies are based on the notion of reusable patterns of code[7,10,11,19]. Coad[7, pp 152-153,] sees patterns as the lowest level elements, classes and objects, and the relationships between them. Johnson states ``patterns are problem oriented, not solution oriented. Each pattern describes how to solve a small part of the large design problem. Sometimes the solution is to make a new subclass, sometimes it is to parameterize an object of an existing class and sometimes it requires connecting several objects together.''[10, p 64,] Yourdon points out that the ``OOPL community assumes that a pattern DOES exist and the job is merely to find it,'' and that in the traditional software analysis, design and implementation community they invent a new solution every time a problem does not fit an old, familiar `pattern.'[19, p 18,]
The various uses suggest a hierarchy that we have found useful in our thinking. There seem to be four distinct levels at which one might use the term ``pattern'':
In line with these views and definitions of a pattern we suggest the following operational definition of a pattern:
A pattern is an abstraction that may be instantiated. It is described by a simple phrase and relates to an observable or discernible aspect of the interface or interaction. Operationally, a pattern:
- has a consistent or corresponding meaning for by users, analysts, designers, and programmers,
- helps in resolving design conflicts by improving communications across the phases of system development,
- is relatively immune to changes in technology, and
- may be applied in multiple situations at both specific and general levels