comp.lang.ada
 help / color / mirror / Atom feed
From: Maciej Sobczak <see.my.homepage@gmail.com>
Subject: Re: Ada Interfaces and the Liskov Substitution Principle
Date: Sun, 03 Jun 2007 15:04:00 -0700
Date: 2007-06-03T15:04:00-07:00	[thread overview]
Message-ID: <1180908240.364236.145720@g4g2000hsf.googlegroups.com> (raw)
In-Reply-To: <2vwm0plnu7gn.172jlansis6fm.dlg@40tude.net>

On 3 Cze, 09:09, "Dmitry A. Kazakov" <mail...@dmitry-kazakov.de>
wrote:

> > Yes, replacement can change the tag. It's the tag of referred object
> > that can change. An access variable can point to Circle and then to
> > Triangle.
>
> No, this is illegal. At least in Ada,: access Circle and access Triangle
> are different types. They cannot be assigned to each other.

I was talking about access Object'Class with Circle and Triangle being
both derived from Object.
The access variable can point to object with different tag during its
lifetime.

> >>>> Ah, wouldn't replacement double dispatching?
>
> >>> No, it wouldn't and that's the second difference. Replacement just
> >>> gets rid of the current value before the new value is refered to,
> >>> which means that from the dispatching point of view this operation is
> >>> simply linear on right-hand-side - it's a pure single dispatch.
>
> >> No, this does not work. Apart from being semantically wrong in general
> >> case, it is technically wrong.
>
> > Why is it semantically wrong?
>
> Because variables of T'Class can be assigned with the values of T'Class if
> T has assignment.

We are going in circles. I say T'Class should be limited.
Even if T is not.

> >> You have to dispatch to finalize LHS. You
> >> have to dispatch to re-construct it from RHS.
>
> > It doesn't change anything in my reasoning. Two linear dispatches
> > don't magically give you double dispatch!
>
> Of course it does. A function of two arguments is still a function of two
> arguments. Decomposability of the function into a product is irrelevant to
> the issue. It dispatches in both arguments.

It doesn't change anything.
Think about extensibility of the system. One of the virtues of OO is
the ability of the system to be reused with new types. If you have a
hierarchy with N types then adding new type means you have to
implement 1 finalizer and 1 cloning (if you want them, of course) and
all replacement semantics in the system still works fine. In other
words, you don't have to involve all other types in the hierarchy when
implementing a new type.
With doubly-dispatching assignment, adding new type to the same
hierarchy means you have to implement N assignments for each potential
situation.
Or even 2*N.

Now think about the hierarchy that has many branches which are
extended independently...

You can theoretize as long as you want and you can say (even rightly)
that replacement is doubly-dispatching, but there *is* a difference
between O(n+m) and O(n*m) - and this difference is what makes
assignment of T'Class simply unrealistic.

> Not at all. The point is:
>
> limited T <=> limited T'Class
>
> No more, no less.

That's your point. Mine is T'Class should be limited.

> The issue of identity / references you are trying to bring in is
> irrelevant. Multiple dispatch assignment is fully applicable to wheel and
> car objects. When you "replace" wheels, you could perform different tasks
> depending on the types of the old and new wheels .How these tasks can be
> encapsulated into one replacement action?

They are not. That's the feature of replacement.

This, however, brings another point - if you want to execute different
assignment tasks depending on both LHS and RHS *types*, then let's
extend it a bit: I want to execute different tasks depending on
current *values* of both LHS and RHS. After all, if assignment is
supposed to be doubly-dispatching and if it's also supposed to be no
different than hypothetical Assign(X, Y), then I should be able to do
this, right?
Right?
Unfortunately, this is completely broken in Ada.
This is just another reason why doubly-dispatching assignment cannot
exist. Not only it's unrealistic to implement correctly (remember the
complexity), there is simply no reasonable structure to build upon.

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




  reply	other threads:[~2007-06-03 22:04 UTC|newest]

Thread overview: 81+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-05-23 19:47 Ada Interfaces and the Liskov Substitution Principle Stefan Lucks
2007-05-23 20:32 ` Ludovic Brenta
2007-05-23 22:00   ` Randy Brukardt
2007-05-24  0:56     ` Anh Vo
2007-05-24 18:27     ` Pascal Obry
2007-05-24 18:39       ` Dmitry A. Kazakov
2007-05-24 18:51         ` Pascal Obry
2007-05-24 22:44         ` Randy Brukardt
2007-05-24  6:57   ` Stefan Lucks
2007-05-23 20:54 ` Maciej Sobczak
2007-05-23 21:58   ` Randy Brukardt
2007-05-24  7:29     ` Maciej Sobczak
2007-05-24  8:02       ` Dmitry A. Kazakov
2007-05-24 12:58         ` Maciej Sobczak
2007-05-24 13:42           ` Dmitry A. Kazakov
2007-05-24 22:08           ` Robert A Duff
2007-07-01  1:00             ` David Thompson
2007-05-24 22:58           ` Randy Brukardt
2007-05-25  7:52             ` Maciej Sobczak
2007-05-25  8:21               ` Dmitry A. Kazakov
2007-05-25 20:27                 ` Maciej Sobczak
2007-05-26  7:48                   ` Dmitry A. Kazakov
2007-05-27  8:30                     ` Maciej Sobczak
2007-05-27 10:04                       ` Dmitry A. Kazakov
2007-05-29  8:03                         ` Maciej Sobczak
2007-05-29 13:18                           ` Dmitry A. Kazakov
2007-05-29 13:32                             ` Dmitry A. Kazakov
2007-05-29 15:34                             ` Maciej Sobczak
2007-05-29 17:07                               ` Dmitry A. Kazakov
2007-05-30  7:40                                 ` Maciej Sobczak
2007-05-30  8:43                                   ` Dmitry A. Kazakov
2007-05-30 12:54                                     ` Maciej Sobczak
2007-05-30 13:56                                       ` Dmitry A. Kazakov
2007-05-30 16:49                                         ` vgodunko
2007-05-30 20:52                                         ` Maciej Sobczak
2007-05-31  8:15                                           ` Dmitry A. Kazakov
2007-05-31 13:46                                             ` Maciej Sobczak
2007-06-01  7:29                                               ` Dmitry A. Kazakov
2007-06-01 13:32                                                 ` Maciej Sobczak
2007-06-01 14:53                                                   ` Dmitry A. Kazakov
2007-06-01 20:31                                                     ` Maciej Sobczak
2007-06-02  8:19                                                       ` Dmitry A. Kazakov
2007-06-02 16:49                                                         ` Maciej Sobczak
2007-06-03  7:09                                                           ` Dmitry A. Kazakov
2007-06-03 22:04                                                             ` Maciej Sobczak [this message]
2007-06-04  8:08                                                               ` Dmitry A. Kazakov
2007-06-04 17:02                                                                 ` Maciej Sobczak
2007-06-05  8:35                                                                   ` Dmitry A. Kazakov
2007-06-05 22:12                                                                     ` Maciej Sobczak
2007-06-06  8:21                                                                       ` Dmitry A. Kazakov
2007-06-06 14:46                                                                         ` Maciej Sobczak
2007-06-06 15:11                                                                           ` Maciej Sobczak
2007-06-06 15:32                                                                       ` Markus E Leypold
2007-05-24 10:42       ` Georg Bauhaus
2007-05-24 13:41         ` Dmitry A. Kazakov
2007-05-25 16:59         ` Markus E Leypold
2007-05-28  9:52           ` Georg Bauhaus
2007-05-28 11:50             ` Dmitry A. Kazakov
2007-05-28 23:32               ` Georg Bauhaus
2007-05-29 12:05                 ` Dmitry A. Kazakov
2007-05-29 13:33                 ` Georg Bauhaus
2007-05-29 17:29                   ` Dmitry A. Kazakov
2007-05-29 20:46                     ` Georg Bauhaus
2007-05-30  7:53                       ` Dmitry A. Kazakov
2007-05-30 13:18                       ` Georg Bauhaus
2007-05-31 10:27                         ` Dmitry A. Kazakov
2007-05-31 11:44                         ` Georg Bauhaus
2007-06-01  7:37                           ` Dmitry A. Kazakov
2007-06-01 10:07                             ` Markus E Leypold
2007-06-01 11:41                             ` Georg Bauhaus
2007-06-01 13:07                               ` Dmitry A. Kazakov
2007-05-28 13:47             ` Markus E Leypold
2007-05-28 23:12               ` Georg Bauhaus
2007-05-28 13:56             ` Markus E Leypold
2007-05-28 23:00               ` Georg Bauhaus
2007-05-24  7:39 ` Dmitry A. Kazakov
2007-05-24 11:12   ` Stefan Lucks
2007-05-24 13:56     ` Dmitry A. Kazakov
2007-05-24 14:41       ` Stefan Lucks
2007-05-24 15:46         ` Dmitry A. Kazakov
2007-05-24 15:00       ` Georg Bauhaus
replies disabled

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