comp.lang.ada
 help / color / mirror / Atom feed
From: Marin David Condic <nobody@noplace.com>
Subject: Re: Idiom for a class and an object in Ada
Date: Thu, 21 Oct 2004 12:24:47 GMT
Date: 2004-10-21T12:24:47+00:00	[thread overview]
Message-ID: <jUNdd.3252$5i5.107@newsread2.news.atl.earthlink.net> (raw)
In-Reply-To: <417682e0$0$91007$39cecf19@news.twtelecom.net>

Matthew Heaney wrote:
> 
> You still haven't explained why TYPE Blivet is tagged and nonlimited.
> 
> 
I would have a)thought that was clear and b) mostly irrelavent to my
question. Since one *can* use a tagged type (natural for extension,
etc.) then what does one do when declaring objects of that type?
Limited or not, you still have to declare them somewhere. Why tagged?
Why not? Its a language feature and I'm curious about what is the
preferred idiom for doing so. Or is it your view that tagged types
should never be used?

> 
> 
> To repeat my answer: declare the TYPE as limited and indefinite, and
> declare selector functions that return references to the statically
> declared instances.  Just like Text_IO.
> 
And just as extensible. How do I get my Big_Shiny_Blue_Blivet from the 
limited, indefinite declaration?

> Limited types are passed by reference, so one way to do sans access
> types is like this:
> 
> package Blivets is type Blivet (<>) is limited private;
> 
> procedure Op (B : Blivet);
> 
> function My_Blivet return Blivet; private type Blivet is limited
> record .. end record; end;
> 
> package body Blivets is ... My_Blivet_Object : Blivet;
> 
> function My_Blivet return Blivet is begin return My_Blivet_Object; 
> end; end Blivets;
> 
> Limited types are passed by reference, so neither allocation nor
> access types are necessary.
> 
So if I may interpolate, your preference would be to put the object
declaration in the package body of the package that creates the class?


> Note that using access types doesn't imply allocation, so it's not
> clear to me what you have against access types.  Another possibility
> is to implement the type as an access type (so direct pointer
> manipulation isn't necessary):
> 
Let's just say "Because I don't feel like it." It would give me problems
with things having nothing to do with Ada and I don't see any need to do
so since a declaration of "Object : Class ;" is totally sufficient for
the job. Keep in mind, I'm not asking about a dozen different style
issues - I'm asking about the preferred scope for a fixed set of static
"objects" (in the OO sense) when one is following the OO methodology.

With or without access types and with or without functions returning the
object, the object has an existence within some scope. It seems to me
that the choices are:

Somewhere within the package spec that defines the "Class"
Somewhere within the package body that defines the "Class"
In a child package of the parent defining the "Class"
In several child packages (one for each object) of the parent defining
the "Class"
In some unrelated library level package wherein presumably one might at
least group together related declarations.
The main program

Even if you do it with some limited and indefinite type because you have
some dislike of tagged types, you still have to declare it somewhere. An
access object only provides a level of indirection so the access object
could be in the package spec, the body, one or more child packages or a
completely unrelated library level package or the main program.


> 
> So take your pick!  In all cases, the objects are declared
> statically, which satisfies your primary constraint.
> 
> 
Well, I can and do take my pick on a regular basis. The question on my
mind was "Is there a generally accepted Ada idiom when implementing the 
OO Design of some class with a limited set of static objects?" You've 
shown one method - albeit, one that avoids the customary tagged records 
designed into Ada to support OO programming. (Given the texts I've 
looked over on OO programming in Ada - they tend to lean towards that 
idiom rather than other possible techniques.)

The question in my mind from the OO Design in Ada texts has been because 
the texts usually discuss all the issues of developing classes, but in 
their limited examples, they usually declare the objects within the 
scope of the main program. Presumably, a whole system would eventually 
be rolled up into one big class with one big object declared at the main 
program level. Since this is not always the case nor is it always 
desirable, my question was about the right idiom to employ when I 
*don't* have the objects all defined in the main program or on the fly 
in dynamic situations.

I hope this clarifies what I was looking for.

MDC


-- 
======================================================================
Marin David Condic
I work for: http://www.belcan.com/
My project is: http://www.jsf.mil/NSFrames.htm

Send Replies To: m   o   d   c @ a   m   o   g
                    c   n   i       c   .   r

     "Power corrupts.  Absolute power is kind of neat"
         -- John Lehman, Secretary of the Navy 1981-1987
======================================================================



  reply	other threads:[~2004-10-21 12:24 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-10-18 11:47 Idiom for a class and an object in Ada Marin David Condic
2004-10-18 12:14 ` Martin Krischik
2004-10-18 19:40   ` Matthew Heaney
2004-10-19 12:59   ` Marin David Condic
2004-10-19 14:46     ` Martin Dowie
2004-10-19 15:55       ` Matthew Heaney
2004-10-19 18:31         ` Martin Dowie
2004-10-19 15:52     ` Matthew Heaney
2004-10-18 12:26 ` Marius Amado Alves
2004-10-19  2:09   ` Jeffrey Carter
2004-10-19  3:28     ` Matthew Heaney
2004-10-19 12:53       ` Marin David Condic
2004-10-19 14:44         ` Matthew Heaney
2004-10-19 15:01           ` Dmitry A. Kazakov
2004-10-19 15:40             ` Matthew Heaney
2004-10-20  7:58               ` Dmitry A. Kazakov
2004-10-20 12:31                 ` Marin David Condic
2004-10-20 13:53                   ` Dmitry A. Kazakov
2004-10-20 15:23                   ` Matthew Heaney
2004-10-21 12:24                     ` Marin David Condic [this message]
2004-10-21 17:15                       ` Matthew Heaney
2004-10-20  5:39         ` Simon Wright
2004-10-20  7:24           ` Matthew Heaney
2004-10-20  8:39             ` Dmitry A. Kazakov
2004-10-21  1:36             ` Jeffrey Carter
2004-10-21  1:46               ` Matthew Heaney
2004-10-21  7:51                 ` Dmitry A. Kazakov
2004-10-21 12:45                   ` Matthew Heaney
2004-10-21 14:11                     ` Dmitry A. Kazakov
2004-10-22  1:04                 ` Jeffrey Carter
2004-10-22  1:36                   ` Matthew Heaney
2004-10-21 19:31               ` Kevin Cline
2004-10-21 22:02                 ` Matthew Heaney
2004-10-22  0:10                   ` Matthew Heaney
2004-10-21  8:25             ` Martin Dowie
2004-10-20 17:04           ` Matthew Heaney
2004-10-20 19:37             ` Simon Wright
2004-10-20 20:04               ` Matthew Heaney
2004-10-22  5:37                 ` Simon Wright
2004-10-20  1:10       ` Jeffrey Carter
2004-10-20  7:04         ` Matthew Heaney
2004-10-20 12:42           ` Marin David Condic
2004-10-20 12:55             ` Matthew Heaney
2004-10-20 15:27             ` Matthew Heaney
2004-10-21  1:36               ` Matthew Heaney
2004-10-19 12:38   ` Marin David Condic
2004-10-18 16:59 ` Matthew Heaney
2004-10-18 18:02 ` Martin Dowie
2004-10-19 13:06   ` Marin David Condic
2004-10-19 14:51     ` Martin Dowie
2004-10-20 16:20 ` Michael Paus
2004-10-20 17:15   ` Matthew Heaney
2004-10-20 17:55     ` Michael Paus
2004-10-21 12:33   ` Marin David Condic
  -- strict thread matches above, loose matches on Subject: below --
2004-10-21 13:59 Stephen Leake
replies disabled

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