We define an Exception to be the occurrence of an abnormal condition
during execution of a program. Generally, an exception is caused by a
failure which was caused by an error.
Exception handling mechanisms have been added to some programming
languages and many embedded systems.
These mechanism are based around the requirement for well defined
behavior such as atomicity. A piece of software must succeed or fail.
Thus an exception must provide only two possibilities:
We can further refine our idea of exceptions (especially in
distributed systems) by observing that there are 4 places an exception
Tidy up and report failure to a higher authority
Retry (perhaps another way).
Case 1 can be dealt with by pre-conditions on operations preventing
this object being corrupted by faults elsewhere.
Case 2 must be dealt with by raising a higher level exception (and will
Case 3 requires a retry mechanism where we may choose an alternate if
Case 4 may be dealt with by retry to an alternate.
Implementing exception handling
is hard. It is only just being introduced to C++ at the time of
An object is being asked incorrectly to do something it cannot
There is a fault in the object
The object invokes an operation in another which is faulty.
There is a communications failure