C++ & STL Design Patterns
Course Description
Design patterns are recurring solutions to software design problems you find again and again in real-world application development. Design patterns are about design and interaction of classes and objects, as well as providing a platform
for communicating elegant and reusable solutions to commonly encountered programming challenges. They are frequently applied by experienced C++ programmers and have become a ‘must know’ for any C++ programmer.
This advanced training course presents several techniques for designing extensible and manageable C++ applications. The course covers numerous design and programming patterns and idioms, which have been used in large scale systems and proven to be effective in solving day-to-day problems. The course provides theoretical and practical coverage of the patterns supported by extensive examples and heuristics.
for communicating elegant and reusable solutions to commonly encountered programming challenges. They are frequently applied by experienced C++ programmers and have become a ‘must know’ for any C++ programmer.
This advanced training course presents several techniques for designing extensible and manageable C++ applications. The course covers numerous design and programming patterns and idioms, which have been used in large scale systems and proven to be effective in solving day-to-day problems. The course provides theoretical and practical coverage of the patterns supported by extensive examples and heuristics.
Course Duration
3 days
Course Objectives
On completion of this course delegates will:
• Understand the definition, purpose, origin and applications of various object oriented design patterns and their implementation in C++.
• Understand and use the handle-body idiom to construct evolving and changing objects at run time.
• Use delegation and layering techniques for building maintainable and evolving object oriented designs.
• Understand the sources of high coupling in the system and learn how to minimize coupling through practical solutions.
• Learn how to maximize cohesion by avoiding class proliferation.
• Gain practical experience in abstracting the object instantiation process by using various object creation patterns.
• Gain practical experience in using inheritance and composition to build object and class structures using a number of structural patterns.
• Learn how to describe and implement algorithms, assignment of responsibility and communication between classes and objects using various behavioural patterns.
• Understand the issues concerning appropriate and efficient use of various components of the C++ STL Library.
• Understand the definition, purpose, origin and applications of various object oriented design patterns and their implementation in C++.
• Understand and use the handle-body idiom to construct evolving and changing objects at run time.
• Use delegation and layering techniques for building maintainable and evolving object oriented designs.
• Understand the sources of high coupling in the system and learn how to minimize coupling through practical solutions.
• Learn how to maximize cohesion by avoiding class proliferation.
• Gain practical experience in abstracting the object instantiation process by using various object creation patterns.
• Gain practical experience in using inheritance and composition to build object and class structures using a number of structural patterns.
• Learn how to describe and implement algorithms, assignment of responsibility and communication between classes and objects using various behavioural patterns.
• Understand the issues concerning appropriate and efficient use of various components of the C++ STL Library.
Course Content
Introduction to Object Oriented Design
Introduction to Object Oriented design with C++, OO notation, static object modelling, dynamic object modelling, introduction to OO design patterns, pattern classification, design pattern notation
The Envelope and Letter Classes
The handle-body idiom, structure versus implementation, delegated polymorphism, delegation and multiple-inheritance
The God Class Problem
High coupling problem, god class and coupling, examples of poor system intelligence distribution, the proliferation of classes, agent classes, controller classes
Structural Design Patterns
The composite pattern, the bridge pattern, the adapter pattern, the proxy pattern, the decorator pattern
Creational Design Patterns
The singleton, templatized singleton, prototype, object factories, abstract factory, exemplar pattern, virtual constructor.
Behavioural Design Patterns
Functors and the command pattern, the strategy pattern, the observer pattern, the visitor pattern, building state machines with the state pattern.
STL Programming Idioms
Choosing the appropriate container, container creation idioms, element insertion idioms, element erasure idioms, choosing the right algorithm, a note on iterators
Introduction to Object Oriented design with C++, OO notation, static object modelling, dynamic object modelling, introduction to OO design patterns, pattern classification, design pattern notation
The Envelope and Letter Classes
The handle-body idiom, structure versus implementation, delegated polymorphism, delegation and multiple-inheritance
The God Class Problem
High coupling problem, god class and coupling, examples of poor system intelligence distribution, the proliferation of classes, agent classes, controller classes
Structural Design Patterns
The composite pattern, the bridge pattern, the adapter pattern, the proxy pattern, the decorator pattern
Creational Design Patterns
The singleton, templatized singleton, prototype, object factories, abstract factory, exemplar pattern, virtual constructor.
Behavioural Design Patterns
Functors and the command pattern, the strategy pattern, the observer pattern, the visitor pattern, building state machines with the state pattern.
STL Programming Idioms
Choosing the appropriate container, container creation idioms, element insertion idioms, element erasure idioms, choosing the right algorithm, a note on iterators
Who should attend?
This course is about programming style and design idioms, and is intended to introduce advanced skills to experienced programmers.
Pre-requisites
Candidates must have a solid understanding of the C++ programming language and OO Design, Data Structures & Algorithms.