Multi-Paradigm Design

Bjarne Stroustrup has never called C++ just an object-oriented language

You think C++ is an object-oriented language? Its designers consciously gave it support for several paradigms including generic programming, overloading — and of course object-based and object-oriented programming. If you’re using an object-oriented design method for your C++ programs, you are missing out on much of the power of the language. Come to this course to learn a design technique that exploits the power of C++. The course is based on the critically acclaimed book, Multi-Paradigm Design for C++.


This course is for:

    1. System Architects

    2. Programmers

    3. Analysts


Participants should have some experience in C++ programming.

Course objectives

Upon completion of this course the participant will be able to (limited to 7 items, be clear and concise):

    1. Choose specific C++ programming techniques for given design circumstances.

    2. Mix C++ paradigms tastefully within a single domain.

    3. Create clear documentation of the structure of a domain, and of the dependencies between domains

    4. Fully exploit the major features of C++ in an intuitive yet disciplined way

    5. Apply the basic techniques of domain analysis to complex software problems.


    1. The Goals of Architecture and Design

        • Architecture and Paradigm

        • Architecture and Organization

        • Architecture and software families

        • Architecture and process

    2. Paradigms, Design and Analysis

        • What is a paradigm?

        • A “Universal paradigm”

        • OO as a special case

        • C++ is not object oriented!

        • Dimensions of Analysis

    3. Domain Analysis

        • Properties of Domains

        • Example: A Text Editor

        • Commonality Analysis with examples

        • Variability Analysis with examples

        • Parameters of Variation

        • Positive and Negative Variation

    4. Solution Domain Analysis

        • The paradigms

        • Procedural, modular, overloading, OO

        • Parametric

        • Transformational Analysis Rules

        • Negative Variability Rules

    5. Simple Domain Partitioning

        • Domain/Paradigm Partitioning

        • Defining system partitions

        • Defining interfaces between partitions

        • Co-existing with other paradigms

    6. Transformational Analysis

        • Text Editing Example

        • Variability tables.

        • Transformational Analaysis

        • Reducing to code

        • Domain Dependency Graphs

    7. Mutually Dependent Domains

        • Unified design and solution

        • Text Buffer Example

        • FSM Example

        • The plight of UML

        • Relationship to patterns

        • Relationship to OO

Based on the thought-provoking book that opens up the deeper reasoning behind the design of the C++ programming langauge