ugh.book

(singke) #1
Abstract What? 211

class. In most cases, changing a class forces a recompile of all code that
could possibly reference it. This typically brings work to a standstill while
entire systems must be recompiled. Your software is no longer “soft” and
malleable; it’s more like quick-setting cement.


Of course, you have to put half of your code in the header files, just to
declare your classes to the rest of the world. Well, of course, the public/pri-
vate distinctions provided by a class declaration are worthless since the
“private” information is in the headers and is therefore public information.
Once there, you’re loathe to change them, thereby forcing a dreaded
recompile. Programmers start to go to extraordinary lengths to add or
change functionality through twisted mechanisms that avoid changing the
headers. They may run into some of the other protection mechanisms, but
since there are so many ways to bypass them, these are mere speedbumps
to someone in a hurry to violate protocol. Cast everything as void* and
presto, no more annoying type checking.


Many other languages offer thoughtfully engineered mechanisms for dif-
ferent kinds of abstraction. C++ offers some of these, but misses many
important kinds. The kinds it does offer are confused and hard to under-
stand. Have you ever met anyone who actually likes using templates? The
result is that the way many kinds of concepts are expressed depends on the
context in which they appear and how they are used. Many important con-
cepts cannot be expressed in a simple way at all; nor, once expressed, can
they be given a name that allows them subsequently to be invoked directly.


For example, a namespace is a common way of preventing one set of
names appropriate to one part of your code from colliding with another set
of names from another part. A program for a clothing manufacturer may
have a class called Button, and it may be linked with a user interface tool-
kit with another class called Button. With namespaces, this is no problem,
since the rules for the usage and meaning of both concepts are clear and
easy to keep straight.


Not so in C++. There’s no way to be sure you haven’t taken a name used
somewhere else in your program, with possibly catastrophic consequences.
Your only hope is to garble up your code with nonsensical prefixes like
ZjxButton and hope nobody else does the same.


Date: Fri, 18 Mar 94 10:52:58 PST
From: Scott L. Burson <[email protected]>
Subject: preprocessor
Free download pdf