comp.lang.ada
 help / color / mirror / Atom feed
From: Dmitry A. Kazakov <mailbox@dmitry-kazakov.de>
Subject: Re: Non-philosophical definition of Eiffel?
Date: Wed, 30 Jul 2003 11:19:24 +0200
Date: 2003-07-30T11:19:24+02:00	[thread overview]
Message-ID: <tnveivonqnt7rgmi5kkmq1761rjhgcjqsa@4ax.com> (raw)
In-Reply-To: 1059496557.747795@master.nyc.kbcfp.com

On Tue, 29 Jul 2003 12:35:57 -0400, Hyman Rosen <hyrosen@mail.com>
wrote:

>Dmitry A. Kazakov wrote:
>> There is little sense in contravariant arguments
>
>OK, I just want to make sure that we're talking about
>the same thing, so let me give specific examples. I'll
>write in C++ terms, just because.
>
>     struct B1 { };
>     struct D1 : B1 { };
>
>     struct B2
>     {
>         virtual B1 &f1();
>         virtual B1 &f2();
>         virtual void f3(B1 &);
>         virtual void f4(D1 &);
>         virtual void f5(B1 &);
>     };
>
>     struct D2 : B2
>     {
>         B1 &f1();
>         D1 &f2();
>         void f3(B1 &);
>         void f4(B1 &);
>         void f5(D1 &);
>     };
>
>     D2 d2;
>     B2 *b2 = &d2;
>
>f1) This is ordinary overriding, with same return type.
>     Pretty much legal in every language.
>f2) This is covariant return type. Legal in C++. This
>     preserves LSP, since a call b2->f2() must return a
>     B1 &, and a D1 & is a B1 &.

Covariant return type does not preserve LSP. There is no thing which
does. Everything depends on the concrete situation. Here is a famous
example where covariant result breaks LSP:

type Ellipse is ...;
function Resize (X : Ellipse;...) return Ellipse;
type Circle is new Ellipse ...;
function Resize (X : Circle;...) return Circle;
   -- Breaks LSP, not every circle, being resized yields a circle.

Typical solutions are:

----- Contravariant result
type Ellipse is ...;
function Resize (X : Ellipse;...) return Ellipse'Class;
type Circle is new Ellipse ...;
function Resize (X : Circle;...) return Ellipse'Class;

----- Exceptions
Resize_Error : exception;
type Ellipse is ...;
function Resize (X : Ellipse;...) return Ellipse;
   -- May raise Resize_Error, but will not
type Circle is new Ellipse ...;
function Resize (X : Circle;...) return Circle;
   -- May raise Resize_Error, and will

---- LSP-abstinence-syndrome
Hey, "computer circles" are not "computer ellipses"!

The mentioned and all other "solutions" have various disadvantages.
The real problem is that it is fundametally unsolvable. One could
easily see that LSP is mathematically unsound, should one try to
define it formally.

>f3) Again, ordinary overriding, with the same argument
>     types in base and derived. Legal everywhere.
>f4) Contravariant argument types. This also preserves
>     LSP, but I don't know of a language which implements
>     it. LSP is preserved because a call of b2->f4() can
>     only pass a D1 & argument, and a D1 & is a B1 &.

Ada does this. It is a class-wide argument.

>f5) Covariant argument types. This is Eiffel's model.
>     LSP is not preserved, because a call to b2->f5()
>     may pass any B1 &, while d2.f5() wants only a D1 &.

Yes, but again, you cannot solve this. It is mother nature which
decided that no positive number have an inverse. So subtype Postive is
Integer ...; inevitable breaks LSP. You just have to decide what do
you want, [an absolute] LSP or positive numbers. I vote for positive
numbers.

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



  parent reply	other threads:[~2003-07-30  9:19 UTC|newest]

Thread overview: 158+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-07-21  2:10 Ariane5 FAQ Alexandre E. Kopilovitch
2003-07-21 14:52 ` Hyman Rosen
2003-07-21 15:54   ` Vinzent Hoefler
2003-07-21 18:01     ` Hyman Rosen
2003-07-21 18:10       ` Vinzent Hoefler
2003-07-21 18:49         ` Hyman Rosen
2003-07-21 19:13           ` Vinzent Hoefler
2003-07-21 19:43             ` Hyman Rosen
2003-07-21 20:46               ` Vinzent Hoefler
2003-07-22  2:04                 ` Hyman Rosen
2003-07-22  5:12                   ` Robert I. Eachus
2003-07-22 19:09                     ` Hyman Rosen
2003-07-22  8:03                   ` Leif Roar Moldskred
2003-07-22  9:00                   ` Vinzent Hoefler
2003-07-23  0:13                     ` Hyman Rosen
2003-07-23  0:31                       ` Bobby D. Bryant
2003-07-23 13:53                         ` Hyman Rosen
2003-07-24 16:35                           ` Richard Riehle
2003-07-25  1:21                             ` Alexander Kopilovitch
2003-07-25  4:26                               ` Richard Riehle
2003-07-25 12:35                               ` Hyman Rosen
2003-07-25 15:47                                 ` Robert I. Eachus
2003-07-25 16:51                                   ` Hyman Rosen
2003-07-25 18:44                                     ` Robert I. Eachus
2003-07-25 21:08                                       ` Simon Wright
2003-07-26  1:02                                         ` Robert I. Eachus
2003-07-26  2:44                                     ` Alexander Kopilovitch
2003-07-27 17:05                                       ` Hyman Rosen
2003-07-27 22:19                                         ` Alexander Kopilovitch
2003-07-28  1:17                                           ` Berend de Boer
2003-07-28  2:39                                             ` Robert I. Eachus
2003-07-28  3:16                                               ` Hyman Rosen
2003-07-28 17:34                                                 ` Mike Silva
2003-07-28 18:03                                                   ` Hyman Rosen
2003-07-29  0:41                                               ` Alexander Kopilovitch
2003-07-29 16:24                                                 ` Robert I. Eachus
2003-07-30  0:53                                                   ` Alexander Kopilovitch
2003-07-31 21:41                                                     ` Robert I. Eachus
2003-08-01 20:19                                                       ` Alexander Kopilovitch
2003-07-29  4:43                                               ` Richard Riehle
2003-07-29  6:06                                                 ` Hyman Rosen
2003-07-29  8:06                                                   ` Vinzent Hoefler
2003-07-29 19:42                                                     ` Berend de Boer
2003-07-29 21:14                                                       ` Robert I. Eachus
2003-07-30  1:13                                                         ` Berend de Boer
2003-07-30 12:58                                                   ` Richard Riehle
2003-07-30 15:04                                                     ` Hyman Rosen
2003-07-29 19:46                                                 ` Berend de Boer
2003-07-30  6:19                                                   ` Richard Riehle
2003-07-30  7:31                                                     ` Hyman Rosen
2003-07-30 13:03                                                       ` Richard Riehle
2003-07-30 13:16                                                         ` Vinzent Hoefler
2003-07-30 15:06                                                           ` Hyman Rosen
2003-07-30 15:15                                                             ` Vinzent Hoefler
2003-07-30 16:46                                                               ` Hyman Rosen
2003-07-30 16:54                                                                 ` Vinzent Hoefler
2003-07-31  8:28                                                                   ` Dmitry A. Kazakov
2003-07-31  9:36                                                                     ` Vinzent Hoefler
2003-07-31 16:28                                                                     ` Warren W. Gay VE3WWG
2003-07-29 19:34                                               ` Berend de Boer
2003-07-29 20:49                                                 ` Simon Wright
2003-07-29 21:52                                                 ` Robert I. Eachus
2003-07-28 18:01                                             ` Non-philosophical definition of Eiffel? (was: Re: Ariane5 FAQ) Alexander Kopilovitch
2003-07-28 18:18                                               ` Non-philosophical definition of Eiffel? Hyman Rosen
2003-07-29  8:43                                                 ` Dmitry A. Kazakov
2003-07-29 13:43                                                   ` Hyman Rosen
2003-07-29 14:56                                                     ` Dmitry A. Kazakov
2003-07-29 16:35                                                       ` Hyman Rosen
2003-07-29 21:39                                                         ` Jim Rogers
2003-07-29 22:33                                                           ` Hyman Rosen
2003-07-30  8:48                                                             ` Pascal Obry
2003-07-30 15:19                                                               ` Hyman Rosen
2003-07-30 18:47                                                                 ` Frank J. Lhota
2003-07-30 19:24                                                                   ` Hyman Rosen
2003-08-04 18:15                                                                   ` Robert Spooner
2003-07-29 22:02                                                         ` Matthew Woodcraft
2003-07-30  9:19                                                         ` Dmitry A. Kazakov [this message]
2003-07-30 16:38                                                           ` Hyman Rosen
2003-07-31  9:58                                                             ` Dmitry A. Kazakov
2003-07-31 15:49                                                               ` Hyman Rosen
2003-08-01  7:57                                                                 ` Dmitry A. Kazakov
2003-08-01 13:31                                                                   ` Hyman Rosen
2003-07-29 19:58                                                 ` Berend de Boer
2003-07-29 20:33                                                   ` Hyman Rosen
2003-07-30  1:20                                                     ` Berend de Boer
2003-07-30  1:49                                                       ` Hyman Rosen
2003-07-30  2:52                                                         ` Berend de Boer
2003-07-30  4:33                                                           ` Hyman Rosen
2003-07-30  4:40                                                           ` Hyman Rosen
2003-07-30 13:16                                                           ` Matthew Heaney
2003-07-30 20:08                                                             ` Berend de Boer
2003-07-30  3:03                                                         ` Berend de Boer
2003-07-30  4:31                                                           ` Hyman Rosen
2003-07-30 20:20                                                             ` Berend de Boer
2003-07-30 21:05                                                               ` Hyman Rosen
2003-07-29 19:51                                               ` Berend de Boer
2003-07-28  2:11                                           ` Ariane5 FAQ Hyman Rosen
2003-07-25 17:39                                 ` Mike Silva
2003-07-25 21:53                                 ` John R. Strohm
2003-07-22 18:29                   ` Mike Silva
2003-07-22 18:50                     ` Hyman Rosen
2003-07-22 19:00                       ` Bobby D. Bryant
2003-07-22 20:47                       ` Mike Silva
2003-07-22 21:11                         ` Hyman Rosen
2003-07-22 21:38                           ` Bobby D. Bryant
2003-07-23 13:56                             ` Hyman Rosen
2003-07-22 21:52                   ` Larry Elmore
2003-07-23 14:11                     ` Hyman Rosen
2003-07-23 15:08                       ` Vinzent Hoefler
2003-07-23 17:48                         ` Hyman Rosen
2003-07-23 18:42                           ` Robert I. Eachus
2003-07-23 20:18                             ` Hyman Rosen
2003-07-23 22:58                               ` Robert I. Eachus
2003-07-24  1:42                                 ` Hyman Rosen
2003-07-24  5:24                                   ` Mike Silva
2003-07-24  9:57                           ` Vinzent Hoefler
2003-07-24 13:52                             ` Hyman Rosen
2003-07-24 15:00                               ` Vinzent Hoefler
2003-07-23 20:33                       ` Mike Silva
2003-07-23 21:35                         ` Hyman Rosen
2003-07-23 23:10                           ` Robert I. Eachus
2003-07-24  5:16                           ` Mike Silva
2003-07-22  4:57                 ` Richard Riehle
2003-07-22  9:00                   ` Vinzent Hoefler
2003-07-22  9:03                   ` John McCabe
2003-07-22 12:28                   ` Marin David Condic
2003-07-23 19:40               ` Simon Wright
2003-07-22  3:11             ` Robert I. Eachus
2003-07-22  9:05               ` John McCabe
2003-07-22  9:38                 ` Bobby D. Bryant
2003-07-22 16:38               ` Robert I. Eachus
2003-07-21 22:03           ` Bobby D. Bryant
2003-07-22  1:57             ` Hyman Rosen
2003-07-21 18:56         ` Francisco Malpartida
2003-07-22  2:22           ` Hyman Rosen
2003-07-22  7:19             ` Tarjei T. Jensen
2003-07-22 19:06               ` Hyman Rosen
2003-07-22 21:24                 ` Robert I. Eachus
2003-07-23 11:55                   ` Tarjei T. Jensen
2003-07-23 19:24                     ` Robert I. Eachus
2003-07-24  0:36                       ` Bobby D. Bryant
2003-07-21 22:00       ` Bobby D. Bryant
2003-07-22  1:59         ` Hyman Rosen
2003-07-22  9:07           ` John McCabe
2003-07-22 13:25             ` Hyman Rosen
2003-07-22  0:16       ` Alexander Kopilovitch
2003-07-22  1:45         ` Hyman Rosen
2003-07-22  7:21           ` Tarjei T. Jensen
2003-07-21 23:24   ` Alexander Kopilovitch
2003-07-22  1:53     ` Hyman Rosen
2003-07-22 16:35       ` Robert I. Eachus
2003-07-22 18:36       ` Mike Silva
2003-07-22 19:23         ` Hyman Rosen
2003-07-22 21:50           ` Robert I. Eachus
2003-07-23 14:21             ` Hyman Rosen
2003-07-23 19:56               ` Robert I. Eachus
2003-07-23 20:26                 ` Hyman Rosen
2003-07-23 23:14                   ` Robert I. Eachus
replies disabled

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