Pattern Oriented Software Architecture - Volume 1
A SYSTEM OF PATTERNS

Frank Buschmann
Regine Meunier
Hans Rohnert
Peter Sommerlad
Michael Stal

 
This book is about patterns for software architecture. A pattern for software architecture describes a particular recurring problem that arises in specific design contexts and presents a well proven generic scheme for its solution. The solution scheme is specified by describing its constituent components, their responsibilities and relationships, and the ways in which they collaborate. Patterns span several levels of abstraction- they range from high-level architectural patterns through design patterns to low-level idioms.

Architectural Patterns

An architectural pattern expresses a fundamental structural schema for software systems.  Architectural Patterns can be grouped into four categories
 
  • From Mud to Structure
  • Distributed Systems
  • Interactive systems
  • Adaptable systems
  • Microkernel
    This pattern applies to software systems that must be able to adapt to changing system requirements. It separates a minimal functional core from extended functionality and customer-specific parts. The micro-kernel also serves as a socket for plugging in these extensions and coordinating their collaboration.
    Reflection
    This pattern provides a mechanism changing the structure and behavior of software systems dynamically. It supports the modification of fundamental aspects, such as type structures and function call mechanisms. In this pattern, an application is split into two parts. A meta level provides information about selected system properties and makes the software self-aware. A base level includes the application logic. Its implementation builds on the meta level. Changes to information kept in the meta level affect subsequent base-level behavior.


    Design Patterns

    A design pattern provides a schema for refining the subsystems or components of a software system, or the relationships between them.  The different categories of design patterns are shown below.
     
  • Structural Decomposition
  • Organization of Work
  • Access Control
  • Management
  • Communication
  • Idioms
    Low level pattern specific to a programming language. It describes how to implement particular aspects of components or the relationships between them using the features of the given language. Example: Counted Pointer.

    Counted Pointer

    The Counted Pointer idiom makes memory management of dynamically allocated  shared objects in C++ easier. It introduces a reference counter to a body class that is updated by handle objects. Clients access body class objects only through handles via the overloaded operator->().
    Pattern Systems
    A pattern system for software architecture is a collection of patterns for software architecture , together with guidelines for their implementation, combination and practical use in software development. Its main objective is to support the development of high quality software systems.  Pattern systems provide an  overview of the patterns it includes by classifying them and thus supports the selection of a pattern by providing an appropriate search strategy.
    In short, Patterns fit well with the existing approaches to software architecture by explicitly building on enabling techniques for constructing well defined software systems such as information hiding and the separation of interface and implementation, by stressing the importance of non-functional properties such as changeability and reliability and by complementing existing problem-independent software development processes and methods with guidelines for solving specific recurring design and implementation problems.