Full description [Brief description]:
Object-oriented software development starts with the examination of an existing or planned system to discover independent entities, which have some physical or logical boundary that separates them from the rest of the system. These entities are called “objects.” Objects with identical properties belong to the same object-class. In an object-oriented programming language, the programmer will describe the internal data and the interfaces among such object-classes by building up a hierarchy whereby new derived classes will inherit and/or override properties of existing superclasses.

While languages like Smalltalk-80 are said to be “truly” object-oriented, C++ is often called a “hybrid” language because C++ retains its ancestral resemblance to C. The reason for this is that two major goals in developing C++ were to retain both the same performance as, and upward-compatibility with, natural C. Probably these goals have strongly contributed to the popularity of C++ for object-oriented software development—especially in the UnixR environment.

This workshop on C++ begins with an introduction to object-oriented software development and the role of the programming environment (especially the class library and related tools). This is followed by a detailed discussion of the language itself. A case study, together with real-life programming examples, will help the participants to understand the language and its underlying philosophy. There is also a close look at event-driven techniques for developing object-oriented applications.

Detailed contents:
In this course you will learn:

Review of object-oriented software development

What does “object-orientation” mean?
  • Abstract data typing
  • Derived classes, inheritance and code factoring
  • Constructors and destructors
  • Classes, objects, messages and methods

Locating classes in a system —Entity-relationship modeling

Central role of the class library

  • Building a reusable class hierarchy
  • Meta-classes
  • Bags, sets, collections, ...
  • Do we really need multiple-inheritance?

Case study

Object-oriented programming style

  • Object hierarchies versus class hierarchies
  • Managing (dynamic) objects
  • Activation and deactivation
  • Using polymorphism
  • Event-oriented programming
  • Testing new classes

Overview of typical object-oriented programming languages

Introduction to C++

Comparing C and C++ programs and modules

A first C++ program using stream I/O

Differences from standard C (not related to object-orientation)

  • ANSI notation
  • Where does C++ differ from ANSI C?
  • Function and operator overloading
  • Automatic type conversion and casting
  • Default arguments and variable argument lists
  • Keywords “const” and “volatile”
  • Anonymous unions
  • Mixing C and C++
  • Type-safe linkage

Definition of simple classes

  • Private and public members
  • Constant and static members
  • Defining methods (private, public, const and static) for the class

Initialization and clean-up

  • Constructor and destructor
  • Default arguments to constructor functions
  • Overloading the constructor
  • Dynamic objects
  • “this” pointer

Friend functions and classes

A closer look at the language

Inheritance

  • Definition of derived classes
  • Private and public base classes
  • Protected members
  • Meta-classes
  • Constructor and destructor calls in derived objects
  • Sending messages to derived objects
  • Building up a useful class-library
  • Single-inheritance versus multiple inheritance (revisited)
  • Problems with multiple-inheritance
  • Virtual base-classes and initialization

Non-trivial operator and function overloading

  • Definition of cast-operators
  • “Smart” pointers by overloading “->”
  • Overloading “new” and “delete”
  • Memory-management policies
  • Garbage collection

Case study

Writing applications in C++

Locating classes (revisited) — Entity-relationship modeling (revisited)

Managing objects in a system

  • Parent/child relationship
  • Insert and delete functions
  • Managing constraint resources
  • Inheritance of resources in an object (not class) hierarchy

Using polymorphism in C++ — Virtual functions

Event-driven programming

  • Definition of events and classes
  • Event recognition and dispatching
  • Event propagation in an object hierarchy
  • Callback functions

Error- and exception-handling

The C++ class-library and programming environment

The C++ class-library

  • Using class I/O in C++ programs
  • Overloading of “>>” and “<<”
  • File manipulation
  • Formatting and manipulators
  • Binary input and output
  • Synchronization of standard I/O and stream library

Task-library

  • Task concept
  • Creation and control of tasks

The C++ programming environment and debugger