
Object-Oriented Design for C++
- Course type:
- Performance (What does this mean?)

| RRP | £1900 exc. VAT |
|---|---|
| Days | 5 |
| Code | OOCPPDE1 |
- view dates / book course
- course description
- blogs
Course dates
We currently do not have public dates scheduled for this course.
Please contact us for details on a closed event for your company or to be added to the public course waitlist.
Overview
Analysis models of a system, such as those described by the UML (Unified Modelling Language), provide an elegant conceptual view of a system’s purpose, but little advice on the practicalities of constructing a system. By contrast, implementation technologies, such as C++, provide the detail necessary to build but little advice on how to establish an effective architecture for your system. This is a gap you may have encountered yourself: having either an understanding of a notation or of a technology, or even both, which is not sufficient to guarantee a successful design. Design is a process that requires additional concepts and practices to be effective and this course acts as the bridge between object-oriented analysis and implementation knowledge, in many respects picking up where QA’s C++ programming language courses and analysis and design courses leave off. The course begins by looking at the conceptual model of a system and the modelling elements used to express it. This is followed by an introduction to patterns, which are an essential concept in modern OO development. Patterns for architecture, design and language-level idioms are introduced and applied to the conceptual model. Technology issues such as concurrency and distribution are covered as options later in the course.
This course is based on the standard UML notation and the choice of C++ as an implementation language
Prerequisites
Delegates must have a solid C++ background, with at least 6 months hands-on experience following the C++ for C Programmers or C++ for non-C Programmers course, or equivalent. Experience of some of the concepts presented on the Advanced C++ Development Techniques course may also be beneficial. You must also have a thorough understanding of object-oriented concepts, which might be gained from one of the analysis and design courses or from our Object-Oriented Software Development course. Your understanding should include Encapsulation, and how to make best use of the C++ public, protected and private access specifiers; Inheritance and how it is expressed in C++; Polymorphism and the use of virtual functions in C++; Abstract classes and pure virtual functions; object relationships, such as association and composition; How to use the C++ const qualifier; How to use existing code libraries, such as the standard C++ library, in your own project.
Recommended Follow-on Courses
Advanced C++ Development Techniques
Developing CORBA Applications in C++
Delegates will learn how to
Develop a system architecture given the analysis models and architectural constraints
Take the detail of a class model and elaborate it into a more complete design specification
Implement an object-oriented design in C++
Apply patterns to their object models to resolve architectural, design and implementation issues
Use features of C++ that support the construction of large applications, and the use of frameworks and existing libraries
Apply the appropriate technology to the implementation of design elements
Who Should Attend
C++ programmers wishing to enhance their OO development skills.
Course Style
Hands-on case study is developed throughout the week from specification to the early stages of coding.
Course outline
System Development
The development life cycle; Activities and deliverables; Use Cases and scenarios
Static Modelling
Classes and object diagrams; Attributes and operations; Association, aggregation and composition; Parameterised classes; Stereotypes
Dynamic Modelling
Sequence diagrams; Collaboration diagrams; State diagrams
Constraints
Programming by contract; Specifying operation behaviour; Clarifying operation and attribute effects; Constraints between relationships
Patterns
Recognising, reusing and documenting recurring design solutions; The Composite pattern; The Iterator pattern; The Command pattern; Idioms as language level patterns; Object streaming; STL iterators
Architecture
Coupling and cohesion; Package, source code, execution and deployment architectures; Architectural patterns; Layered systems
Functionality and Representation
Mapping attributes and operations to C++ class members; Logical vs physical const-ness; Argument passing conventions; Class static members; Inline functions; Separation of policy from computation
Delegation
Delegation principles; The Object Adapter pattern; Reducing compile-time dependencies with the Cheshire Cat idiom; The Bridge pattern; The Proxy pattern; Smart pointers
Class Relationships
Inheritance vs delegation; Interfaces; Pure abstract classes; Multiple inheritance; Class Adapter pattern
Object Relationships
Resolving relationship multiplicity and link attributes; Implementation techniques for association, aggregation and composition; The Null Object pattern; Bidirectional relationships
Object Creation and Ownership
Customising the new and delete operators; Object factories; The Factory Method pattern; The Disposal Method pattern; The Singleton pattern; Reference counted smart pointers
Object State
Object life cycle models and state diagrams; Explicit and derived attributes for object state; State transition tables; The Objects for States pattern; The Collections for States pattern
Exceptions
Handling constraint violations at runtime; Catching and throwing exceptions in C++; Writing exception safe code
Events and Notification
Events and event propagation models; The pull model and polling; The push model and callbacks; The Chain of Responsibility pattern; The Observer pattern; Model/View/Controller (MVC); Event queues
Libraries and Frameworks
Reusing code through libraries; The standard C++ library; Framework types; Framework architecture
Concurrency
Active and passive objects; Sequential, guarded and concurrent operations; Threaded objects; Thread safety
Component Systems
Overview of COM; Overview of CORBA; Interface Definition Languages (IDLs); Stubs and skeletons
Distributed Systems
Principles and consequence of distribution; Distributed object development; Distribution idioms; The Distributed Iterator pattern
Persistence
Object to RDBMS mapping; Object DBMS; Serialisation
Related blogs
Using sed From The Command Line To Edit Files
Posted by Andrew Mallett on 08 September 2010
I have more than likely said this before: I am lazy and I want an easy life. This is why I use Linux Command Line Tools to help me. If you have a similar passion for all things simple then take a look at this article that uses sed to edit files.
SQL Server for the passive aggressive
Posted by Phil Stirpe on 05 September 2010
How would you react if you walked into a classroom to deliver a course and came face to face with a delegate who three years earlier ripped you off for several thousand pounds?
Learning about learning
Posted by Stephanie Dedhar on 03 September 2010
A recent trip to the Science Museum proved that, with a little imagination, learning absolutely can be fun as well as effective.
Using the Novell ZCM 10.3 Agent to Display Closest Server Rules
Posted by Andrew Mallett on 02 September 2010
QA have been training and consulting with Novell ZCM 10 ( desktop management ) since the early days of the product back in 2007. So you know coming that by on training with us you are going to get the latest and most accurate advice and knowledge. A new feature of the 10.3 agent is that it allows support staff to display the evaluated closest server rules from the view point of the agent. This is great in trouble shoot as it is an easy mechanism to test the rules that you have created.
Creating Dynamic RAID Arrays with BTRFS
Posted by Andrew Mallett on 28 August 2010
You may have used Logical Volumes on Linux before with either LVM or EVMS and, of course, software raid. Now though we have a file-system that supports volumes that can dynamically increase and support RAID : BTRFS. With the complete implementation in the file-system the deployment and management is simplified and performance is increased. Although still EXPERIMENTAL it is worth looking at BTRFS as it has become to ship in many of the leading Linux Distributions.
