Notes on Software Patterns:
Introduction to Patterns

H. Conrad Cunningham

16 April 2022

Copyright (C) 2004-2022, H. Conrad Cunningham
Professor of Computer and Information Science
University of Mississippi
214 Weir
P.O. Box 1848
University, MS 38677
(662) 915-7396 (dept. office)

Browser Advisory: The HTML version of this textbook requires a browser that supports the display of MathML. A good choice as of April 2022 is a recent version of Firefox from Mozilla.

Introduction to Patterns

Chapter Introduction

TODO: This set of slides is not fully compatible with the chapter as of 16 April 2022.

Approach

Concept of Design Pattern

Pattern

Characteristics of Patterns (1)

Characteristics of Patterns (2)

Description of Pattern

Buschmann et. al. [1] approach. Others differ in structure but have same purpose.

  1. Context

  2. Problem

  3. Solution

Description of Pattern: Context

Description of Pattern: Problem

Description of Pattern: Solution

Categories of Patterns

  1. Architectural patterns

  2. Design patterns

  3. Idioms

Architectural Pattern

“An architectural pattern expresses a fundamental structural organization schema for software systems. It provides a set of predefined subsystems, specifies their responsibilities, and includes rules and guidelines for organizing the relationships between them” [1]

Architectural Pattern Examples

From Buschmann et al. [1] unless otherwise noted

Design Pattern

“A design pattern provides a scheme for refining the subsystems or components of a software system, or the relationships between them. It describes a commonly-recurring structure of communicating components that solves a general design problem within a particular context” [1]

Design Pattern Examples (1)

Names from Gamma et al. [2] unless otherwise noted

Design Pattern Examples (2)

Names from Gamma et al. [2] unless otherwise noted

Design Pattern Examples (3)

Names from Gamma et al. [2] unless otherwise noted

Idiom

“An idiom is a low-level pattern specific to a programming language. An idiom describes how to implement particular aspects of components or the relationships between them using the features of the given language” [1]

Acknowledgementa

These slides are based partially on my notes titled “Introduction to Patterns”. The original version of these slides (in Powerpoint) was supported by a grant from the Acxiom Corporation titled “The Acxiom Laboratory for Software Architecture and Component Engineering (ALSACE)” in 2004. The research team consisted of Dr. Conrad Cunningham, PhD students Yi Liu and Pallavi Tadepalli, and MS students Mingxian Fu and Hui Xiong.

References

[1]
Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sommerlad, and Michael Stal. 1996. Pattern-oriented software architecture: A system of patterns. Wiley, Hoboken, New Jersey, USA.
[2]
Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. 1995. Design patterns: Elements of reusable object-oriented software. Addison-Wesley, Boston, Massachusetts, USA.
[3]
Mary Shaw. 1996. Some patterns for software architecture. In Pattern languages of program design 2, John M. Vlissides, James O. Coplien and Norman L. Kerth (eds.). Addison-Wesley, Boston, Massachusetts, USA, 255–270.
[4]
Mary Shaw and David Garlan. 1996. Software architecture: Perspectives on an emerging discipline. Prentice-Hall, Englewood Cliffs, New Jersey, USA.
[5]
Bobby Woolf. 1997. Null object. In Pattern languages of program design 3, Robert Martin, Dirk Riehle and Frank Buschmann (eds.). Addison-Wesley, Boston, Massachusetts, USA, 5–18.