comp.lang.ada
 help / color / mirror / Atom feed
From: "Tucker" <tucker@yaletaft.com>
Subject: Re: Possible Ada deficiency?
Date: 16 Jan 2005 20:40:16 -0800
Date: 2005-01-16T20:40:16-08:00	[thread overview]
Message-ID: <1105936816.827842.186420@f14g2000cwb.googlegroups.com> (raw)
In-Reply-To: 1104516913.718856.94090@z14g2000cwz.googlegroups.com

danmcleran@hotmail.com wrote:
> I would like to know if anyone else thinks that the inability to hide
> private information from child packages is a deficiency in Ada95. I
am
> discussing ways to do this on another thread, (See Private area and
> child packages), but it seems wrong that one has to go through a
bunch
> of machinations to do something like this. Wouldn't a language
> construct for this be advantageous?

We considered this during the Ada 95 design process.
Our conclusion was that C++ public/protected/private
was analogous to Ada's "visible part of pkg spec"/
"private part of pkg spec"/"body of pkg".
C++ doesn't really have the equivalent of a "body."
If you want to add a new function that is only usable
within a given class, you generally still have to declare
it in the ".h" (unless you play games with "friends"),
which is a royal pain IMHO.

If you really need to declare something in a package spec,
but you don't want it visible to children, one solution
is to declare it in a nested package.  The private part
of a nested package is not visible to children.

One consideration, however, is that trying to hide something
from all possible future children may be overengineering.
Some C++ coding styles encourage use of "protected" rather
than "private," since it is hard to foresee all of the kinds
of extensions that might be necessary in the future.  However,
in C++, "protected" is troublesome during maintenance, since
*all* derivatives of a type can see its protected components,
no matter where the type is declared.  And the type hierarchy
below a type may be very large, and spread all over the place.

On the other hand, Ada's approach to "partial" privacy forces
any package which needs visibility to be given a name which
essentially makes it part of the "subsystem" where the data
is defined.  Although there is nothing preventing someone
from creating their own child of someone else's subsystem,
when they do that, they generally accept the fact that they
may need to be prepared to do some work next time a new
revision of the subsystem is released.  On the other hand,
in C++, you are generally encouraged to get the advantages
of reuse by creating lots of derivatives of a type, and you
are probably less likely to think you are signing up for
a potential maintenance burden when a new version of the
base type is released.  I agree it is a subtle distinction,
but in my experience, it creates the right kind of subtle
incentive.  When someone creates a child of someone else's
subsystem, they do so to export a bit more information,
rather than dumping all of their own logic into the child.
So the net effect is that the amount of code that has visibility
is smaller, and so the ability to accommodate a change to the
parent package is better.

>
> In C++ and Java, no private data can be seen by child classes. I
think
> that Ada would benefit from extending its information hiding
> capabilities by allowing a package writer to conceal type information
> from child packages.
>
> What if Ada had a keyword, I've chosen 'concealed' for the sake of
> discussion, to indicate that the implementation of a type was not
> visible to the outside world (including child packages)...

Wrapping the type in a nested package can be used to
accomplish approximately what you need.

-Tucker Taft




  parent reply	other threads:[~2005-01-17  4:40 UTC|newest]

Thread overview: 103+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-12-31 18:15 Possible Ada deficiency? danmcleran
2004-12-31 19:12 ` Jeffrey Carter
2005-01-01  1:52   ` danmcleran
2005-01-01  2:37     ` Jeffrey Carter
2005-01-01  2:02   ` danmcleran
2005-01-01 14:11     ` Martin Krischik
2005-01-01 15:27       ` danmcleran
2005-01-02 17:49         ` Martin Krischik
2005-01-01 15:30     ` Stephen Leake
2005-01-01 15:57       ` danmcleran
2005-01-03 23:37         ` Randy Brukardt
2005-01-07 17:26           ` Nick Roberts
2005-01-07 18:26             ` danmcleran
2005-01-07 21:32             ` Randy Brukardt
2005-01-08  3:56               ` Nick Roberts
2005-01-08 18:15                 ` Robert A Duff
2005-01-08 19:11                   ` Jeffrey Carter
2005-01-08 20:03                     ` Robert A Duff
2005-01-09  3:40                       ` Jeffrey Carter
2005-01-09 17:30                         ` Robert A Duff
2005-01-09 19:24                           ` Jeffrey Carter
2005-01-09 21:56                           ` Nick Roberts
2005-01-10 13:47                             ` Dmitry A. Kazakov
2005-01-10 16:46                               ` Duncan Sands
2005-01-10 17:58                                 ` Pascal Obry
2005-01-10 18:45                                   ` Dmitry A. Kazakov
2005-01-10 19:44                                     ` Pascal Obry
2005-01-11 10:05                                       ` Dmitry A. Kazakov
2005-01-11  7:24                                     ` Vinzent 'Gadget' Hoefler
2005-01-11  9:48                                       ` Dmitry A. Kazakov
2005-01-11 13:57                                         ` Vinzent 'Gadget' Hoefler
2005-01-11 21:52                                           ` Robert A Duff
2005-01-12 11:22                                           ` Dmitry A. Kazakov
2005-01-09 17:23                   ` danmcleran
2005-01-09 17:46                     ` Robert A Duff
2005-01-10  3:05                       ` danmcleran
2005-01-09 18:41                   ` Nick Roberts
2005-01-09 19:06                     ` Martin Krischik
2005-01-09 20:10                     ` Robert A Duff
2005-01-09 20:15                     ` Robert A Duff
2005-01-11 14:13                       ` Possible Ada deficiency? (goto) Peter Hermann
2005-01-11 14:54                         ` Nick Roberts
2005-01-11 22:15                         ` Robert A Duff
2005-01-12 10:17                           ` Peter Hermann
2005-01-15 17:34                             ` Robert A Duff
2005-01-15 17:58                               ` Dmitry A. Kazakov
2005-01-15 19:34                                 ` Robert A Duff
2005-01-10 20:15                   ` Possible Ada deficiency? Randy Brukardt
2005-01-10 21:51                     ` Robert A Duff
2005-01-11 20:23                       ` Randy Brukardt
2005-01-11 21:24                         ` Robert A Duff
2005-01-12 19:57                           ` Randy Brukardt
2005-01-02 15:51       ` Adrian Hoe
2005-01-04 16:06       ` Peter Hermann
2005-01-01 23:36     ` tmoran
2005-01-02  3:38       ` danmcleran
2004-12-31 19:16 ` Martin Dowie
2005-01-01  2:32   ` Jeffrey Carter
2004-12-31 23:23 ` Nick Roberts
2005-01-01  1:56   ` danmcleran
2005-01-01 11:43 ` Dmitry A. Kazakov
2005-01-01 15:46   ` danmcleran
2005-01-01 17:58     ` Larry Kilgallen
2005-01-01 19:43       ` danmcleran
2005-01-02  0:36         ` Ed Falis
2005-01-02  3:36           ` danmcleran
2005-01-02 15:53             ` Ed Falis
2005-01-07 18:31               ` danmcleran
2005-01-07 18:44                 ` Pascal Obry
2005-01-07 19:29                   ` danmcleran
2005-01-07 21:28                     ` Pascal Obry
2005-01-01 23:28   ` danmcleran
2005-01-02 10:26     ` Dmitry A. Kazakov
2005-01-02 15:51       ` danmcleran
2005-01-03 23:48     ` Randy Brukardt
2005-01-01 14:06 ` Martin Krischik
2005-01-01 15:53   ` danmcleran
2005-01-07 21:33 ` Robert A Duff
2005-01-09 17:15   ` danmcleran
2005-01-09 17:38     ` Robert A Duff
2005-01-10  3:16       ` danmcleran
2005-01-09 18:41     ` Martin Dowie
2005-01-10  3:18       ` danmcleran
2005-01-10 20:32         ` Randy Brukardt
2005-01-10 21:42           ` danmcleran
2005-01-10 21:36         ` Robert A Duff
2005-01-10 21:44           ` danmcleran
2005-01-09 19:01     ` Jeffrey Carter
2005-01-10  3:20       ` danmcleran
2005-01-10 22:16         ` Robert A Duff
2005-01-10 22:29           ` danmcleran
2005-01-11 20:12             ` Georg Bauhaus
2005-01-11 20:30               ` danmcleran
2005-01-11 21:44               ` Robert A Duff
2005-01-11  0:06           ` Jeffrey Carter
2005-01-11  0:46             ` Robert A Duff
2005-01-11 20:37           ` danmcleran
2005-01-11 21:08             ` Robert A Duff
2005-01-17  4:40 ` Tucker [this message]
2005-01-18 13:46   ` danmcleran
2005-01-18 21:29     ` Nick Roberts
2005-01-24 17:23   ` danmcleran
  -- strict thread matches above, loose matches on Subject: below --
2004-12-31 19:06 danmcleran
replies disabled

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