SIGCSE 2002 DC
Application – Tracy L. Lewis
Tracy L. Lewis
Virginia Polytechnic
Institute and State University
Dept of Computer Science
Teaching Design Through the Use of Patterns to
Introductory Object-Oriented Design Students
Designing software is difficult,
and designing reusable software is even more difficult. A design should be specific to the problem
at hand but also general enough to address future problems and requirements. Experienced designers will tell that a
reusable and flexible design is difficult if not impossible to get “right” on
the first time. Before a design is considered “finished”, designers usually try
to reuse it several times, modifying it each time.
One thing that expert
designers know not to do is solve problems based on first principles. Rather, they reuse solutions that have
worked from the past. You’ll find
repetitious patterns of classes and communicating objects in object-oriented
systems. These patterns solve specific
design problems and make object-oriented design more flexible, elegant, and
ultimately reusable. In essence,
patterns help designers reuse successful designs by basing new designs on prior
experience.
Over twenty years ago
architect Christopher Alexander began work on the thesis that one could achieve
excellence in architecture by learning, using and reusing a carefully defined
set of design rules, or patterns. Although the quality of a well-designed
building is not easily put into words, the patterns that make up the building
are remarkably simple and easy to understand by laymen.
Interest in software
patterns emerged from leading software designers in the industry. Less than ten
years ago the object-oriented software engineering community adapted the
concept of patterns set forth by Alexander.
There was a need to develop designs that were specific to the problems
at hand yet general enough to address future problems and requirements.
Patterns are devices that allow programmers to share knowledge about system
requirements and designs. While developing
software, programmers encounter many problems that have occurred, and will
occur again. The question that must be answered is how is the problem going to
be solved this time. Documenting patterns is one way to reuse and possibly
share the information learned about how it is best to solve a specific program
design problem.
The object-oriented community hoped the use of
patterns and pattern languages in software development would increase
productivity, shorten development intervals, reduce cost, and most importantly,
foster a vocabulary for expressing concepts.
There is a direct correlation between Alexander’s patterns and
Object-Oriented (OO) constructs. As
stated by Christopher Alexander, in his notes introducing patterns to
object-oriented designers, in OO design, classes have two principle aspects,
analogous to those of patterns:
The best classes also share the properties of
appropriate abstraction, encapsulation, openness, and equilibrium. Like
patterns, classes are normally generative, supporting parameterized instance construction
as well as higher order instantiation in the case of generic (template)
classes.
Currently, many experts only teach patterns to
experienced designers willing to sit through a series of online tutorials or
day-long seminars. And, if patterns are
taught in the academic environment, they are only taught to upper-class or
graduate students that have taken courses in the areas object-oriented design,
data structures, algorithms and software engineering. In reviewing undergraduate design courses, I’ve found that the
subject of design patterns is usually covered in the last week(s) of the
semester, and little, if any, emphasis is placed on patterns for the final
grade in the course. It is my argument that we can teach design patterns to
students in the introductory OO course, towards the beginning of the semester,
through a system of sequential patterns chunking, thus improving their
knowledge of commonly occurring problems, in turn improving their overall
software design skills.
Patterns can be sequentially chunked based upon
several measures:
It is my plan to introduce patterns by starting with
simple programming idioms and gradually progressing through more complicated design
patterns.
During the Spring 2002, I will conduct a pilot study
with students from the Introductory Object-Oriented design class here at
Virginia Tech. The pilot study will involve students participating in five
one-hour long computer based sessions on patterns. I will observe three groups
during the course of the semester:
In this
study, I will conduct an initial assessment to collect demographic, background
and current design knowledge information at the beginning of the semester. This
is necessary to assure that I have a sample size of equal skill sets in all
groups. Students participating in this study will be requested to keep a log of
the amount of time necessary to complete the required assignments and any
comments related to their usage of patterns. It is my goal to show that those
students exposed to sequential patterns chunking, continued to use and adapt
patterns in future designs throughout the course, progressively improving their
design specifications and software deliverables. In using two forms of teaching patterns, I also plan to show that
students who are exposed to patterns based on their prior design knowledge will
show a significant level of improvement over those who are introduced to
patterns in a sequential approach. Towards the end of the semester, I will
conduct a follow-up assessment on design knowledge and the student’s ability to
recognize design problems that are encountered throughout the semester.
-
I
am in the initial phase of defining the scope of my research plan.
-
It
is my plan to defend the proposal of this research in January 2002.
Having had the opportunity to be a student volunteer
last year, I had the privilege of sitting in on several of the DC
presentations. The students there were
given the opportunity to share their research ideas with their peers and
respected researchers with this field in a very intimate relaxed environment.
The support and feedback that was given seemed invaluable. I knew that once I
began to focus on a topic, submitting to this Doctoral Consortium was a must!
Appleton, B. Patterns and Software: Essential Concepts
and Terminology; http://www.enteract.com/~bradapp,
1997.
Alexander,
C. A
Pattern Language. Oxford University Press, New York, 1977.
Alexander, C. The Timeless Way of Building. Oxford
University Press, New York, 1979.
Booch, G. Object-Oriented Analysis and Design with
Applications Second Edition. Benjamin/Cummings, Redwood City, CA, 1994.
Coplien, J. Software Patterns. SIGS Books and
Multimedia, New York, 1996.
Eden, A., Gil,
J, and Yehudai, A. Automating the Application of Design Patterns. Journal
of Object Oriented Programming, May 1997.
Gamma, E.,
Helm, R., Johnson, R., and Vlissides, J. Design
Patterns: Elements of Reusable Object-Oriented Software. Addison Wesley,
Reading, MA, 1995.
Lewis, T. The Diffusion of Technology as it Applies to
Software Pattern Recognition. North Carolina A&T State University
Master’s thesis, December 1998.
Tidwell, J. Common
Ground: A Pattern Language for Human-Computer Interface Design. http://www.mit.edu/~jtidwell/common_ground.html
Rising, L. A Patterns Handbook. Cambridge University
Press, New York, NY, 1998.