Mark Lundquist wrote:
> From: "Robert I. Eachus" <[log in to unmask]>
...
> > Ada 95 does have a class construct, it is spelled tagged.
>
> Well, sort of. Part of the definition a class is the specification of
> its public methods, but a tagged record declaration does not include
> this.
...
>My use of the phrase "special
> class construct" is to be understood as identical with your phrase
> "special notation for declaring classes".
I personally wouldn't limit the term "language construct" to
syntax-level entities, so I can agree with both of you.
- You don't see a syntax-level "thing" that encapsulates a class.
- Robert sees a semantic "thing" that provides the functionality
of a class (abstraction, inheritance, polymorphism, etc.)
For this reason, Ada has a PR problem among people who look at the
very shallowest surface of the language. Some people in the Ada 9X
process argued strongly that Ada 95 should have a keyword or
syntax construct called "class," just to make it easier to sell
the language's O-O features -- for absolutely no technical reason.
I feel the Ada construct is the right technical choice. The
fact is that Ada's system is MORE powerful.
- To fully and formally encapsulate classes, you use Ada's
encapsulation mechanism -- the package. Put each class in
its own package.
- To tightly couple some classes, you can put them into the
same package, so each can see the other's implementation.
(This is often a bad idea, but it is occasionally quite
useful -- rather like keeping GOTO in the language.)
- I have also used tagged types to simplify coding in a purely
procedural program. From what I've read about typical C++
usage, this is not uncommon -- but in C++ it's more confusing,
because you have to define bogus "classes" for non-objects.
Note that I'm not a O-O totalitarian. Some people thing
EVERYTHING should be object oriented, NOTHING should be
procedural. They will knock a language that lets you organize
your design in any other way.
I personally think that's hogwash, and I very much like the
integrated procedural and object-oriented facilities of Ada.
But it might have been helpful for PR to have a separate "class"
keyword -- maybe allow replacement of "package" with "class,"
and require that any such package's spec contains ONLY one
tagged type and its dispatching procedures. One could view it
as a form of strong typing applied to packages. But I don't
think it's that important of an omission.
Best,
Sam Mize
--
Samuel Mize -- [log in to unmask] (home email) -- Team Ada
Fight Spam: see http://www.cauce.org/ \\\ Smert Spamonam
|