comp.lang.ada
 help / color / mirror / Atom feed
From: danmcleran@hotmail.com
Subject: Re: Possible Ada deficiency?
Date: 1 Jan 2005 15:28:10 -0800
Date: 2005-01-01T15:28:10-08:00	[thread overview]
Message-ID: <1104622090.271236.286730@c13g2000cwb.googlegroups.com> (raw)
In-Reply-To: <p42feqrui3cs.n1bi6hz47hux$.dlg@40tude.net>

Here's a different way to illustrate this problem. If I want to extend
a type, I can do this with a non-child package. But, if I make the
package containing the extended type a child package, I then have
access to all of the private area as well. So, one can extend a type
with or without access to the private area, depending on whether one
makes the packages containing the derived type a child package or not.
In my example, notice that the derived type in the child package can
change the private area, whereas the derived type in the non-child
package cannot.

Consider these files (Main.adb is the test program):

--Some_Package.ads

package Some_Package is
type Secret_Type is tagged private;

procedure Print_Secret_Value (Value : in out Secret_Type'Class);
private
type Secret_Type is tagged record
Secret_Value : Integer := 0;
end record;
end Some_Package;

--Some_Package.adb

with Ada.Text_IO;

package body Some_Package is
procedure Print_Secret_Value (Value : in out Secret_Type'Class) is
begin
Ada.Text_IO.Put_Line (Item => "Secret value = " &
Integer'Image(Value.Secret_Value));
end Print_Secret_Value;
end Some_Package;

--Some_Package.Child_Package.ads

package Some_Package.Child_Package is
type Some_Child_Type is new Secret_Type with null record;

procedure Badness (
Child     : in out Some_Child_Type;
New_Value : in Integer);


end Some_Package.Child_Package;

--Some_Package.Child_Package.adb

package body Some_Package.Child_Package is
procedure Badness (
Child     : in out Some_Child_Type;
New_Value : in Integer) is
begin
Child.Secret_Value := New_Value;
end Badness;
end Some_Package.Child_Package;

--Non_Child_Package.ads

with Some_Package;

package Non_Child_Package is
type Derived_Type is new Some_Package.Secret_Type with null record;

procedure Badness (
Derived   : in out Derived_Type;
New_Value : in Integer);

end Non_Child_Package;

--Non_Child_Package.adb

package body Non_Child_Package is
procedure Badness (
Derived   : in out Derived_Type;
New_Value : in Integer) is
begin
--Derived.Secret_Value := New_Value;--won't compile
null;
end Badness;
end Non_Child_Package;

--Main.adb

with Some_Package;
with Some_Package.Child_Package;
with Non_Child_Package;

procedure Main is
Child_Value : Some_Package.Child_Package.Some_Child_Type;
Non_Child   : Non_Child_Package.Derived_Type;
begin
Some_Package.Print_Secret_Value (Value => Child_Value);
Some_Package.Print_Secret_Value (Value => Non_Child);
Some_Package.Child_Package.Badness (Child => Child_Value, New_Value
=> 100);
Non_Child_Package.Badness (Derived => Non_Child, New_Value => 100);
Some_Package.Print_Secret_Value (Value => Child_Value);
Some_Package.Print_Secret_Value (Value => Non_Child);
end Main;




  parent reply	other threads:[~2005-01-01 23:28 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 [this message]
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
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