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:
System Architects
Programmers
Analysts
Participants should have some experience in C++ programming.
Upon completion of this course the participant will be able to (limited to 7 items, be clear and concise):
Choose specific C++ programming techniques for given design circumstances.
Mix C++ paradigms tastefully within a single domain.
Create clear documentation of the structure of a domain, and of the dependencies between domains
Fully exploit the major features of C++ in an intuitive yet disciplined way
Apply the basic techniques of domain analysis to complex software problems.
The Goals of Architecture and Design
Architecture and Paradigm
Architecture and Organization
Architecture and software families
Architecture and process
Paradigms, Design and Analysis
What is a paradigm?
A “Universal paradigm”
OO as a special case
C++ is not object oriented!
Dimensions of Analysis
Domain Analysis
Properties of Domains
Example: A Text Editor
Commonality Analysis with examples
Variability Analysis with examples
Parameters of Variation
Positive and Negative Variation
Solution Domain Analysis
The paradigms
Procedural, modular, overloading, OO
Parametric
Transformational Analysis Rules
Negative Variability Rules
Simple Domain Partitioning
Domain/Paradigm Partitioning
Defining system partitions
Defining interfaces between partitions
Co-existing with other paradigms
Transformational Analysis
Text Editing Example
Variability tables.
Transformational Analaysis
Reducing to code
Domain Dependency Graphs
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