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:

  1. Students exposed to a system that will teach a sequential approach to learning design patterns. The program is designed to start out with simple programming idioms (i.e. loops) and become progressively more difficult.
  2. Students exposed to a system that teaches patterns based upon the user’s prior design knowledge and answers to intermediate questions.
  3. Students not exposed to any method of teaching patterns.

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.

 


Current Stage in Program of Study

-         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.


Anticipated Gains from participating in the Doctoral Consortium

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!


Bibliographic References

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.