comp.lang.ada
 help / color / mirror / Atom feed
From: "Pat Rogers" <progers@classwide.com>
Subject: Re: Package Instances???
Date: Wed, 20 Feb 2002 22:31:21 GMT
Date: 2002-02-20T22:31:21+00:00	[thread overview]
Message-ID: <ZsVc8.834$XR7.182220937@newssvr11.news.prodigy.com> (raw)
In-Reply-To: 3C73F5F6.7050704@mail.com

"Hyman Rosen" <hyrosen@mail.com> wrote in message
news:3C73F5F6.7050704@mail.com...
> Matthew Heaney wrote:
> > Yes.  An Ada package is analogous to a C++ namespace, not a class.
>
> Except that in Ada, a package can be used as a parameter for a
> generic instantiation, but in C++ a namespace cannot be used as
> a template argument. Given that C++ classes can have arbitrary
> things defined in them (types, static functions, constants, etc.)
> considering them as an analogue of Ada packages is not wrong.

Yes, I agree with that sentiment, but I don't agree that one can make the
analogies in isolation from other language elements.  I would express it thusly:
a C++ class declared is analogous to a tagged type declared within a package
visible part.  The package, the type, and the corresponding primitive operations
work together to form an abstraction.  This atomicity is illustrated, for
example, by the fact that subprograms are not primitive operations of the type
unless they are declared in the same package as the tagged type declaration
itself (in addition to the other requirement, namely, that they mention the type
in their parameter and (for functions) result type profile).  Subprograms that
meet the second requirement but not the first are not primitive operations of
the type and thus are not inherited and are not dynamically dispatched.

A package not exporting a tagged type with primitive operations could correspond
to a C++ namespace.  What's missing is that, like Java's packages, C++
namespaces can be extended dynamically -- they can be "re-opened".  An Ada
package is a module, with a definite end.  But then there are subsystems...

You might be interested in the Ada generated from UML by a product called "UML
Studio" (www.pragsoft.com).  It uses the specified namespace of the UML class,
if present, as the package name, and the UML class name for the tagged type name
within that package.  If the namespace is not specified, it uses the class name
as the package name and "Object" for the tagged type name.

---
Patrick Rogers                       Consulting and Training in:
http://www.classwide.com          Real-Time/OO Languages
progers@classwide.com               Hard Deadline Schedulability Analysis
(281)648-3165                                 Software Fault Tolerance





  reply	other threads:[~2002-02-20 22:31 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-02-13 21:02 Package Instances??? Yates
2002-02-13 21:12 ` Larry Kilgallen
2002-02-13 21:21 ` chris.danx
2002-02-13 21:46 ` Marin David Condic
2002-02-14 17:59   ` Hyman Rosen
2002-02-15 13:11     ` Marc A. Criley
2002-02-15 19:20     ` Simon Wright
2002-02-19 14:08       ` Marin David Condic
2002-02-20  1:37         ` Matthew Heaney
2002-02-20 16:56           ` Marin David Condic
2002-02-21 15:33             ` Matthew Heaney
2002-02-20 19:16           ` Hyman Rosen
2002-02-20 22:31             ` Pat Rogers [this message]
2002-02-20 23:44             ` Matthew Heaney
2002-02-21  5:35               ` Hyman Rosen
2002-02-21 14:05                 ` Marin David Condic
2002-02-22 16:49                   ` Hyman Rosen
2002-02-22 17:22                     ` Marin David Condic
2002-02-24  7:39                       ` Hyman Rosen
2002-02-25 15:38                         ` Matthew Heaney
2002-02-22 18:10                     ` Matthew Heaney
2002-02-22 20:55                       ` Hyman Rosen
2002-02-22 21:37                         ` Matthew Heaney
2002-02-24  7:36                           ` Hyman Rosen
2002-02-25 15:27                             ` Matthew Heaney
2002-02-21 15:30                 ` Matthew Heaney
2002-02-21 18:05                   ` Hyman Rosen
2002-02-13 21:50 ` Eric Merritt
2002-02-14 15:08 ` Yates
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox