Patterns in the Field of Software Engineering

Patterns in the Field of Software Engineering

Fuensanta Medina-Domínguez (Carlos III Technical University of Madrid, Spain), Maria-Isabel Sanchez-Segura (Carlos III Technical University of Madrid, Spain), Antonio de Amescua (Carlos III Technical University of Madrid, Spain) and Arturo Mora-Soto (Carlos III Technical University of Madrid, Spain)
DOI: 10.4018/978-1-60566-026-4.ch484
OnDemand PDF Download:
$37.50

Abstract

In the mid 1960’s, the architect Christopher Alexander (1964) came up with the idea of Patterns, as “a solution to a problem within a defined context” and developed this concept. He explains, in a very original way, his ideas of urban planning and building architecture, using patterns to explain the “what”, “when”, and “how” of a design. Alexander invented a Pattern Language that is the fundamental to good building and city designs, and describes it in a collection of repetitive schemas called patterns. In Computer Science, software is susceptible to conceptual patterns. Consequently, Ward Cunningham and Kent Beck, used Alexander’s idea to develop a programming pattern language composed of five patterns as an initiation guide for Smalltalk programming. This work was presented at the Object-Oriented Programming, Systems, Languages & Applications Conference (OOPSLA) in 1987. In the early 1990’s, Erich Gamma and Richard Helm did a joint research that resulted in the first specific design patterns catalog. They identified four patterns: Composite, Decider, Observer, and Constrainer patterns. According to many authors, OOPSLA ’91 highlighted the evolutionary process of design patterns. The synergy between Erich Gamma, Richard Helm, Rala Johnson, and John Vlissides (better known as the “Gang of Four” or GoF) and other reputable researchers (Ward Cunningham, Kant Beck or Doug Lea) definitively launched the study of and research into Object Oriented Design Patterns. At the same time, James Coplien, another software engineer, was compiling and shaping a programming patterns catalogue in C++, which was a significant advance in the implementation phase in software development. Coplien’s catalog was published in 1991 under the title “Advanced C++ Programming Styles and Idioms”. Between 1991 and 1994 the concept of pattern design was discussed at international congresses and conferences. All of these encounters culminated in OOPSLA ’94. The GoF took advantage of this event to present their compilation (Gamma, Helm, Johnson & Vlissides, 1995). This publication, considered at that time as the best book on Object Orientation, compiled a 23-pattern catalog, founding the basis of patterns design. The number of pattern-related works, studies and publications in general, but especially in design, has exponentially grown since. However, the different research groups being born must be cataloged into three fundamental paradigms: • Theoretical approximations to the software pattern design concept and pattern languages. Coplien’s work (Coplien, 1996; 2004; Coplien & Douglas, 1995) stands out in this field. • Analysis and compilation of software applications design patterns. Rising’s efforts (Rising, 1998; 2000) and Buschmman (Buschmann, Meunier, Rohnert, Sommerlad & Stal, 1996; Buschmann, Rohnert, Stal & Schmidt, 2000) are included in this classification. • The study of special purpose patterns, like antipatterns (Brown, 1998).
Chapter Preview
Top

Introduction

In the mid 1960’s, the architect Christopher Alexander (1964) came up with the idea of Patterns, as “a solution to a problem within a defined context” and developed this concept. He explains, in a very original way, his ideas of urban planning and building architecture, using patterns to explain the “what”, “when”, and “how” of a design.

Alexander invented a Pattern Language that is the fundamental to good building and city designs, and describes it in a collection of repetitive schemas called patterns.

In Computer Science, software is susceptible to conceptual patterns. Consequently, Ward Cunningham and Kent Beck, used Alexander’s idea to develop a programming pattern language composed of five patterns as an initiation guide for Smalltalk programming. This work was presented at the Object-Oriented Programming, Systems, Languages & Applications Conference (OOPSLA) in 1987.

In the early 1990’s, Erich Gamma and Richard Helm did a joint research that resulted in the first specific design patterns catalog. They identified four patterns: Composite, Decider, Observer, and Constrainer patterns.

According to many authors, OOPSLA ’91 highlighted the evolutionary process of design patterns. The synergy between Erich Gamma, Richard Helm, Rala Johnson, and John Vlissides (better known as the “Gang of Four” or GoF) and other reputable researchers (Ward Cunningham, Kant Beck or Doug Lea) definitively launched the study of and research into Object Oriented Design Patterns.

At the same time, James Coplien, another software engineer, was compiling and shaping a programming patterns catalogue in C++, which was a significant advance in the implementation phase in software development. Coplien’s catalog was published in 1991 under the title “Advanced C++ Programming Styles and Idioms”.

Between 1991 and 1994 the concept of pattern design was discussed at international congresses and conferences. All of these encounters culminated in OOPSLA ’94. The GoF took advantage of this event to present their compilation (Gamma, Helm, Johnson & Vlissides, 1995). This publication, considered at that time as the best book on Object Orientation, compiled a 23-pattern catalog, founding the basis of patterns design.

The number of pattern-related works, studies and publications in general, but especially in design, has exponentially grown since. However, the different research groups being born must be cataloged into three fundamental paradigms:

  • Theoretical approximations to the software pattern design concept and pattern languages. Coplien’s work (Coplien, 1996; 2004; Coplien & Douglas, 1995) stands out in this field.

  • Analysis and compilation of software applications design patterns. Rising’s efforts (Rising, 1998; 2000) and Buschmman (Buschmann, Meunier, Rohnert, Sommerlad & Stal, 1996; Buschmann, Rohnert, Stal & Schmidt, 2000) are included in this classification.

  • The study of special purpose patterns, like antipatterns (Brown, 1998).

As has been explained, the pattern concept has clear origins, and an important value as a reuse tool. The main problem is that the word pattern has been used almost for everything, thus losing its original meaning. The goal of this work is to go back to the definition of patterns and present how software engineering is working with this concept.

The remainder of this chapter is structured as follows. Section two provides both, formal and informal definitions of pattern as well as the formats used to describe them. Section three presents a classification of existing patterns in the field of software engineering. In section four, the authors describe their conclusions and present the future trends in section five. A selection of key terms is defined at the end of the chapter.

Key Terms in this Chapter

Product: Is any thing to be produced during the whole software development process.

Process: Is a set of sequential practices that are functionally coherent and reusable for software engineering organization, implementation, and management. It is usually referred to as the software process, or simply the process.

Product Pattern: Is an artefact that encapsulates the knowledge of software engineering experts to obtain a specific software product.

Design Pattern: Defines and explains systematically a general design to a recurrent problem of design in object oriented system.

Process Pattern: Provides a guide to show how carry out specifics tasks in the development of a process. A process pattern ( Garson, 2006 ) is an approach to a specific task that has been tried with good results.

Analysis Pattern: Is an idea that has been useful in one practical context and will probably be useful in others ( Fowler, 1997 ).

Process Improvement: Is an activity that seeks to identify and rectify “common causes” of poor quality in software systems by making basic changes in the underlying software management process (available at: http://www.sei.cmu.edu/opensystems/glossary.html ).

Software Engineering: Is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software.

Pattern: Is a recurring solution to a common problem in a given context and system of forces ( Alexander, 1979 ).

Complete Chapter List

Search this Book:
Reset