comp.lang.ada
 help / color / mirror / Atom feed
From: "Steve" <nospam_steved94@comcast.net>
Subject: Re: oo programing help needed?
Date: Sat, 06 Dec 2003 15:50:53 GMT
Date: 2003-12-06T15:50:53+00:00	[thread overview]
Message-ID: <wVmAb.442622$Tr4.1230701@attbi_s03> (raw)
In-Reply-To: mailman.29.1070719903.31149.comp.lang.ada@ada-france.org

"Stephen Leake" <stephen_leake@acm.org> wrote in message
news:mailman.29.1070719903.31149.comp.lang.ada@ada-france.org...
> Georg Bauhaus <sb463ba@l1-hrz.uni-duisburg.de> writes:
>
> > shoko <shoko2004@hotmail.com> wrote:
> > : i have the following:
> > : ------------------------------------------
> > : package one is
> > :  type one  is tagged private;
> > :  type one_ptr is access all one'class;
> > :
> > :   procedure set_name(name:String;this:in out one);
> > :  function  get_name(this:one) return string;
> > :
> > :  private
> > :     type one  is tagged
> > :     record
> > :         name:String(1..256);
> > :     end record;
> > :
> > :
> > : end one ;
> > ...
> > : -------------------------------------------
> > : package body three is
> > :   function get_name(this:three) return string
> > :     s:string(1..10);
> > :   begin
> > :     return s+ this.name;  <-- no selector "name" for type three
> > :  end get_name;
> >
> >
> > In the definition of one in package one, you have chosen to
> > hide .name from view. But then you select a .name component
> > from within the body of package three, which as a package
> > is just any package, and thus cannot see the private
> > part of package one. (You could use get_name in three
> > because it is not in the private part of one. This might
> > be a good thing to do anyway as it respects the contract
> > for dealing with ones using one's public operations.)
>
> Or, you can make packages Two and Three child packages of One; then
> they have visibility to the private part of One.
>
> Which approach is correct depends on what your full application is.
>
> -- 
> -- Stephe
>
Another alternative (assuming get_name(this:one) does the obvious):

with one;
package body three is
   function get_name(this:three) return string is
     s:string(1..10);
   begin
     return s & one.get_name(one.one(this));
  end get_name;
end three;

BTW: It doesn't really take that much extra effort to actually run code you
post through the compiler.  If you had done so you would have had a few
other errors:

package three is
...
end two;      <-- Package name doesn't match

package body three is
   function get_name(this:three) return string  <-- Missing "is"
     s:string(1..10);

The "+" operator is not defined to concatenate two strings.  Use "&"
instead.

It's easy to save newsgroup posts and run gnatchop to get source files to
test.  It is annoying when the files generated don't compile due to errors
in the source.

Steve
(The Duck)







  reply	other threads:[~2003-12-06 15:50 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-12-06 10:21 oo programing help needed? shoko
2003-12-06 12:23 ` Georg Bauhaus
2003-12-06 14:11   ` Stephen Leake
2003-12-06 15:50     ` Steve [this message]
2003-12-06 13:46 ` Martin Krischik
2003-12-07  2:42 ` Jeffrey Carter
replies disabled

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