comp.lang.ada
 help / color / mirror / Atom feed
From: Maciej Sobczak <no.spam@no.spam.com>
Subject: Re: Constructing an object
Date: Thu, 22 Sep 2005 09:28:12 +0200
Date: 2005-09-22T09:28:12+02:00	[thread overview]
Message-ID: <dgtmec$6kp$1@sunnews.cern.ch> (raw)
In-Reply-To: <1lw8oz33ao529.12ep5ay7rg4oc$.dlg@40tude.net>

Dmitry A. Kazakov wrote:

>>I'm learning Ada and I would like to better understand the ways used to 
>>create objects.

>>1. By procedure, which is a primitive operation for each type in the 
>>hierarchy,

>>2. By function:


> 3. The default values:

OK, this solves some of the cases. In general, however, by 
"initialization" I mean performing some actions (not just inventing 
values), like acquire on external resources.

> 4. Initialization enforcement via discriminants:
> 
> 4.a. Discriminants as members:
> 
> type Shape (C : Color) is tagged null record;
>    -- C has to be defined

I think it has the same problem.

> 4.b. Box-discriminants:
> 
>    type Shape (<>) is tagged private;
>         -- Shape objects have to be initialized
> 
> private
>    type Shape is tagged record
>       C : Color;
>    end record;

I will have to read more about this, thanks for pointing the direction.

> 5. Abstract types with private descendants and a factory:
> 
>    type Abstract_Shape is abstract tagged null record;
>    function New_Shape (...) return Abstract_Shape'Class;
>       -- Factory is the only public way to create it
> private
>    type Shape is new Abstract_Shape with ...;

And I think this is the most general solution. In addition, the types 
that I'm crazy about initializing are those which can introduce a lot of 
problems when not well encapsulated. For the same reason it makes sense 
to make them private and carefully design their behavioral interface. 
The above scheme should work well for them.

Thanks for response,

-- 
Maciej Sobczak : http://www.msobczak.com/
Programming    : http://www.msobczak.com/prog/



  reply	other threads:[~2005-09-22  7:28 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-09-21  8:46 Constructing an object Maciej Sobczak
2005-09-21 10:16 ` Georg Bauhaus
2005-09-22  7:21   ` Maciej Sobczak
2005-09-21 11:55 ` Dmitry A. Kazakov
2005-09-22  7:28   ` Maciej Sobczak [this message]
2005-09-22  7:45     ` Maciej Sobczak
2005-09-22 13:33       ` Dmitry A. Kazakov
2005-09-24  5:23         ` Randy Brukardt
2005-09-24  9:47           ` Dmitry A. Kazakov
2005-09-29  0:12             ` Randy Brukardt
2005-09-29  8:17               ` Dmitry A. Kazakov
2005-09-29 22:21                 ` Randy Brukardt
2005-09-30  8:14                   ` Jean-Pierre Rosen
2005-09-30 19:28                     ` Dmitry A. Kazakov
2005-09-30 17:49                   ` Robert A Duff
2005-10-01  0:44                     ` Randy Brukardt
2005-10-01 10:49                       ` Dmitry A. Kazakov
2005-10-01 11:06                       ` Tapio Kelloniemi
2005-10-01 14:13                         ` Robert A Duff
2005-10-02 11:52                           ` Tapio Kelloniemi
2005-10-01 15:19                       ` Georg Bauhaus
2005-09-23  5:40 ` Matthew Heaney
2005-09-23  7:18   ` tmoran
2005-09-23  8:23   ` Maciej Sobczak
2005-09-23 12:04     ` Dmitry A. Kazakov
2005-09-23 12:36       ` Matthew Heaney
2005-09-23 13:03         ` Hyman Rosen
2005-09-23 13:41           ` Maciej Sobczak
2005-09-23 14:23           ` Matthew Heaney
2006-01-17  6:28             ` [Offtopic] " James Dennett
2005-09-23 13:42         ` Dmitry A. Kazakov
2005-09-23 14:27           ` Matthew Heaney
2005-09-23 12:24     ` Matthew Heaney
2005-09-24  5:34       ` Randy Brukardt
replies disabled

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