Gamma – Helm - Johnson – Vlissides
When Alexander claims you can design a house simply by applying his patterns one after another, he has goals
similar to those of object-oriented design methodologists who give step-by-step rules for design. Alexander
doesn't deny the need for creativity; some of his patterns require understanding the living habits of the people
who will use the building, and his belief in the "poetry" of design implies a level of expertise beyond the pattern
language itself.
1
But his description of how patterns generate designs implies that a pattern language can make
the design process deterministic and repeatable.
The Alexandrian point of view has helped us focus on design trade-offs—the different "forces" that help shape
a design. His influence made us work harder to understand the applicability and consequences of our patterns. It
also kept us from worrying about defining a formal representation of patterns. Although such a representation
might make automating patterns possible, at this stage it's more important to explore the space of design
patterns than to formalize it.
From Alexander's point of view, the patterns in this book do not form a pattern language. Given the variety of
software systems that people build, it's hard to see how we could provide a "complete" set of patterns, one that
offers step-by-step instructions for designing an application. We can do that for certain classes of applications,
such as report-writing or making a forms-entry system. But our catalog is just a collection of related patterns;
we can't pretend it's a pattern language.
In fact, we think it's unlikely that there will ever be a complete pattern language for software. But it's certainly
possible to make one that is more complete. Additions would have to include frameworks and how to use them
[Joh92], patterns for user interface design [BJ94], analysis patterns [Coa92], and all the other aspects of
developing software. Design patterns are just a part of a larger pattern language for software.
Patterns in Software
Our first collective experience in the study of software architecture was at an OOPSLA '91 workshop led by
Bruce Anderson. The workshop was dedicated to developing a handbook for software architects. (Judging from
this book, we suspect "architecture encyclopedia" will be a more appropriate name than "architecture
handbook.") That first workshop has led to a series of meetings, the most recent of which being the first
conference on Pattern Languages of Programs held in August 1994. This has created a community of people
interested in documenting software expertise.
Of course, others have had this goal as well. Donald Knuth's The Art of Computer Programming [Knu73] was
one of the first attempts to catalog software knowledge, though he focused on describing algorithms. Even so,
the task proved too great to finish. The Graphics Gems series [Gla90, Arv91, Kir92] is another catalog of
design knowledge, though it too tends to focus on algorithms. The Domain Specific Software Architecture
program sponsored by the U.S. Department of Defense [GM92] concentrates on gathering architectural
information. The knowledge-based software engineering community tries to represent software-related
knowledge in general. There are many other groups with goals at least a little like ours.
James Coplien's Advanced C++: Programming Styles and Idioms [Cop92] has influenced us, too. The patterns
in his book tend to be more C++-specific than our design patterns, and his book contains lots of lower-level
patterns as well. But there is some overlap, as we point out in our patterns. Jim has been active in the pattern
community. He's currently working on patterns that describe people's roles in software development
organizations.
Página