The Right Approach to Exceptions

Jonathan M Davis jmdavisProg at gmx.com
Tue Feb 21 11:17:50 PST 2012


On Tuesday, February 21, 2012 10:57:20 Andrei Alexandrescu wrote:
> On 2/21/12 10:50 AM, Juan Manuel Cabo wrote:
> > I thought that an alternative to Variant[string] would be to have some
> > virtual functions overrideable (getExceptionData(string dataName) or
> > something). but they would all have to return Object or Variant, so it's
> > the same thing.
> Exactly. By and large, I think in the fire of the debate too many people
> in this thread have forgotten to apply a simple OO design principle:
> push policy up and implementation down. Any good primitive pushed up the
> exception hierarchy is a huge win, and any design that advocates
> reliance on concrete types is admitting defeat.

Exceptions do _not_ lend themselves to polymorphism. Having them in a type 
hierarchy is useful. It allows you to deal with them at varying levels of 
abstractions. But ultimately, you deal with the concrete types, _not_ an 
abstract interface. In that sense, they're not OO _at all_.

Adding a Variant[string] property to allow adding on additional information if 
a particular application finds it useful may be a good thing to do. But it 
should be an _add on_, not the core design. Aside from printing strings, 
trying to deal with exceptions generically just does not make sense. At best, 
you might care about a common exception rather than a more specific one in 
particular case (e.g. catching IOException rather than FileException). But if 
you're trying to actually handle the exception in any real way rather than 
just print out a message, you need the concrete type, not an abstract 
interface.

I think that you're pushing the OO angle too hard onto exceptions. They're not 
completely separated from it, but they really aren't classic OO and shouldn't 
be treated as such. If anything, they're inverted, because you frequently try 
and deal with as concrete a type as possible rather than as abstract a type as 
possible. The hierarchy aspect is really the only truly OO aspect of 
exceptions IMHO. For the most part, polymorphism just doesn't enter into it. 
And Exception really already declares the few functions where it does.

- Jonathan M Davis


More information about the Digitalmars-d mailing list