comp.lang.ada
 help / color / mirror / Atom feed
From: "Warren W. Gay VE3WWG" <ve3wwg@cogeco.ca>
Subject: Re: Need advice re package organization.
Date: Wed, 30 Jul 2003 17:00:00 -0400
Date: 2003-07-30T17:00:00-04:00	[thread overview]
Message-ID: <clWVa.4191$mv6.741217@news20.bellglobal.com> (raw)
In-Reply-To: <fiveiv8h309dkvjqf6nb343osfjl41qt3o@4ax.com>

Dmitry A. Kazakov wrote:
> On Tue, 29 Jul 2003 13:18:29 -0400, "Warren W. Gay VE3WWG"
> <ve3wwg@cogeco.ca> wrote:
>>Dmitry A. Kazakov wrote:
>>
>>>On Sun, 27 Jul 2003 18:02:08 -0400, "Warren W. Gay VE3WWG"
>>><ve3wwg@cogeco.ca> wrote:
>>>
>>>>Robert I. Eachus" <rieachus@attbi.com> wrote in message news:3F22F9E9.3040307@attbi.com...
>>>>
>>>>>Warren W. Gay VE3WWG wrote:
>>>>>
>>>>>>[As a side note, I sometimes wonder if an enhancement to the Ada0Y
>>>>>>language might be to be able to specify a limited visibility of a
>>>>>>parent package's object's internals (a la not "protected" type in
>>>>>>C++). A protected class in C++ allows derived code to mess with the
>>>>>>internals, whereas normally the parent object's elements are a
>>>>>>black box. Use of limited visibility helps to reduce code coupling.]
>>>>>
>>>>>Actually, that is what a private child package is for.  It allows you to
>>>>>move all of the "useful" internals out of a package body to a place
>>>>>where the body and all the child packages can access them.
>>>>
>>>>Actually, what I had in mind was the object visibility here (not
>>>>package visibility). When deriving from existing tagged records, there
>>>>is no way to limit the visibility of the parent object's members (a
>>>>la "protected" in C++/Java). A derived object can freely mess with any
>>>>tagged record's members, as it sees fit. Information hiding
>>>>and reduced coupling practices suggests that this is not the safest
>>>>route (best to use the existing parent object methods to mess with
>>>>the "parent members").
>>>
>>>I do not know whether there is a statistics regarding use protected
>>>vs. private, but I think that most C++ programmers just stick to
>>>public vs. not. Burden of decision is too heavy for many.
...
> Comparing C++ with Ada, we could say that Ada's "private" is rather
> C++'s "protected". Then Ada has, and C++ lacks, an ability to define
> subroutines with full access to members in the package body, without
> any specification changing. 

The problem occurs in the private child package (IMO) because
you want to derive new objects from parent tagged records. The
danger that develops is that the child package's body code may
monkey with things in the parent object that you don't want it
to (this is lack of information hiding).

However, you can fix the object visibility by making it a non
child package (just another package using the first). However,
the problem then becomes that you lose access to other types
and definitions that are in the other package's private part.

So in my mind, there still exists a short-coming OO wise
in the visibility rules for objects: it needs a way to
mark parts of a tagged object as "off limits" for the child
package, which always enjoys full visibility of the parent
package's tagged record (object).

> Such subroutines could be viewed as an
> equivalent to C++'s "private methods". What Ada does not have are
> private data members in C++ sense. So we have:
> 
> protected in C++ <--> private in Ada
> private method <--> a subroutine in the body [a FAT plus to Ada ]
> private member  <--> missing [a minus]

I think you need to add a dimension to this "chart", because
there are multiple (at least 2) views:

   1. simple client view
   2. a _normal_ child package view

   (a _private_ child's view is the same I think, but if not, this
    is a 3rd).

The problem I am trying to address, is #2. The child package sees
all, even when you don't want it to.

> From my point of view, Ada's model is clearer and more consitent with
> separate compilation / development model. Private, in C++ sense,
> things should actually never appear in the specification.

Well, one could argue that the private parts of a specification
should never be seen by clients (particularly for libraries where
body code is not provided). However, there are obviously practical
compiler reasons for including those things ;-)

One other raod a compiled language like Ada could have taken,
is to compile an intermediate file for those parts of a spec
that are required by the compiler, but should not be seen by
the client. But this has other practical problems, I suspect.

> I remember, Robert Duff, proposed a way to hide everything really
> *private* in the bodies. This would be IMO a right thing.

A child package often needs types and other constants from the
parent package, but "wants" the safety of not dabbling with the
parent object's internals.

Warren.
-- 
Warren W. Gay VE3WWG
http://home.cogeco.ca/~ve3wwg




  reply	other threads:[~2003-07-30 21:00 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-07-26 13:08 Need advice re package organization Bobby D. Bryant
2003-07-26 14:25 ` Robert I. Eachus
2003-07-26 15:27   ` Warren W. Gay VE3WWG
2003-07-26 22:00     ` Robert I. Eachus
2003-07-27 22:01       ` chris
2003-07-28  2:53         ` Robert I. Eachus
2003-07-29  4:52           ` Richard Riehle
2003-07-27 22:02       ` Warren W. Gay VE3WWG
2003-07-28  8:38         ` Dmitry A. Kazakov
2003-07-29 17:18           ` Warren W. Gay VE3WWG
2003-07-30  8:42             ` Dmitry A. Kazakov
2003-07-30 21:00               ` Warren W. Gay VE3WWG [this message]
2003-07-30 22:46                 ` Randy Brukardt
2003-07-31 16:39                   ` Warren W. Gay VE3WWG
2003-07-31 17:31                     ` Randy Brukardt
2003-07-31 21:00                       ` Warren W. Gay VE3WWG
2003-07-31 22:13                     ` Robert I. Eachus
2003-08-01 12:51                       ` Warren W. Gay VE3WWG
2003-07-31  5:57                 ` Matthew Heaney
2003-07-31 16:57                   ` Warren W. Gay VE3WWG
2003-07-31 22:33                     ` Robert I. Eachus
2003-08-01  2:58                       ` Chad R. Meiners
2003-08-01 13:51                         ` Stephen Leake
2003-08-01 22:15                           ` Robert I. Eachus
2003-08-04 13:45                             ` Stephen Leake
2003-08-01 13:01                       ` Warren W. Gay VE3WWG
2003-07-31  9:04                 ` Dmitry A. Kazakov
2003-07-31 16:59                   ` Warren W. Gay VE3WWG
2003-07-31 20:41                     ` Randy Brukardt
2003-07-31 21:15                       ` Warren W. Gay VE3WWG
2003-08-01 20:04                         ` Randy Brukardt
2003-08-01 21:33                           ` Stephen Leake
2003-08-04 19:40                             ` Randy Brukardt
2003-08-04 19:52                               ` Stephen Leake
2003-08-05  3:36                   ` Richard Riehle
2003-08-05  4:03                     ` Hyman Rosen
2003-08-05  7:16                     ` Dmitry A. Kazakov
2003-07-26 17:03 ` Nick Roberts
replies disabled

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