comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: How to test object hierarchy
Date: Sun, 21 Dec 2003 14:43:27 +0100
Date: 2003-12-21T14:43:27+01:00	[thread overview]
Message-ID: <bs47m5$9e9ea$2@ID-77047.news.uni-berlin.de> (raw)
In-Reply-To: bs37t7$7ka$3@a1-hrz.uni-duisburg.de

Georg Bauhaus wrote:

> Dmitry A. Kazakov <mailbox@dmitry-kazakov.de> wrote:
> : 
> :> should "with type" be mentioned in this context?
> : 
> : Interesting, why do you thing it should?
> 
> I'm not really familiar with "with type", but I thought (guessed)
> that the OP's procedure could be distributed across pairs of two,
> each procedure taking one top level class-wide parameter and
> a derived type parameter. If I have
> 
> package D is
> 
>    type Root is tagged private;
> 
>    type Derived_1 is new Root with private;
> 
>    procedure Op_1(d: Derived_1; other: Derived_2'Class);
>                                        -- too early
>    procedure Op_1(d: Derived_2; other: Derived_2'Class);
>                   --  too early,       too early
> 
>    type Derived_2 is new Root with private;
> 
>    procedure Op_2(d: Derived_2; other: Derived_1'Class);
>    procedure Op_2(d: Derived_1; other: Derived_1'Class);
>                   -- too late
> 
>    ...
> 
> Will "with type" and package reorganisation help?

I think that IF Ada should have multiple dispatch on different types then
inevitably we should reconsider the freezing rules. The most useful
implementations of MD appear when types are defined in different packages.
The rationale behind the existing freezing rules is to prevent dispatching
to non-elaborated targets. I believe that for a MD operation the freezing
point could be the last freezing point of all involved types. For example:

package Devices is
   type Device is tagged ...;
   procedure Load (X : in out Device);
end Device; -- No more primitive operations with only Device

with Devices; use Devices;
package Curves is
   type Curve is tagged ...;
   procedure Show (X : in out Device; Y : Curve);
end Curves; -- No more operations with Device and Curve

It is clear that these rules can be very dangerous, if we will not limit use
of non-primitive operations (except the class-wide ones). The first step
could be to make all types "tagged". But even this could be not enough.

-- 
Regards,
Dmitry A. Kazakov
www.dmitry-kazakov.de



  reply	other threads:[~2003-12-21 13:43 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-12-18 18:24 How to test object hierarchy Pierre Favier
2003-12-19  0:15 ` Stephen Leake
2003-12-19  7:45   ` Pierre Favier
2003-12-19 10:53 ` Dmitry A. Kazakov
2003-12-19 14:35   ` Hyman Rosen
2003-12-19 17:07     ` Dmitry A. Kazakov
2003-12-19 23:26     ` Robert A Duff
2003-12-20 18:20       ` Robert I. Eachus
2003-12-19 17:25   ` Georg Bauhaus
2003-12-20 11:13     ` Dmitry A. Kazakov
2003-12-21  4:34       ` Georg Bauhaus
2003-12-21 13:43         ` Dmitry A. Kazakov [this message]
2003-12-21 19:58           ` Dmytry Lavrov
2003-12-22  1:19             ` Robert I. Eachus
2003-12-22 10:09               ` Dmitry A. Kazakov
2003-12-22 17:33                 ` Robert I. Eachus
2003-12-23 10:49                   ` Dmitry A. Kazakov
2003-12-22 10:05             ` Dmitry A. Kazakov
2003-12-19 17:24 ` 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