comp.lang.ada
 help / color / mirror / Atom feed
From: Maciej Sobczak <see.my.homepage@gmail.com>
Subject: Re: A bad counterintuitive behaviour of Ada about OO
Date: Sun, 10 Aug 2014 13:55:00 -0700 (PDT)
Date: 2014-08-10T13:55:00-07:00	[thread overview]
Message-ID: <a1282b60-5a34-4c4c-9d07-812ef0e0a4ca@googlegroups.com> (raw)
In-Reply-To: <19297tmx9dt9q.1p2p4i0odtkyw.dlg@40tude.net>

W dniu sobota, 9 sierpnia 2014 18:48:33 UTC+2 użytkownik Dmitry A. Kazakov napisał:

> The example does not make any sense. Since it would be impossible to
> dispatch on Make without knowing the type of the outcome.

The example does not make any sense, because it is not supported by Ada. It does make perfect sense in those languages that support it.

> Factory pattern in Ada is this:
> 
>    type Factory is abstract tagged null record;
> 
>    function Make (F : not null access Factory) return A'Class;
> 
> Then you do:
> 
>    type A_Factory is new Factory with ...
> 
>    override function Make (F : not null access A_Factory) return A'Class;
> 
>    type B_Factory is new Factory with ...
> 
>    override function Make (F : not null access B_Factory) return A'Class;
> 
> And in case you do know the result type no factory object is ever needed,
> because you just do:
> 
>    X : A;

Wrong. Or rather half-way right. I also want to do this:

   Y : B := Make (B_F);

In other words, if I know that I have a Cat_Shelter, then I want to get a real Cat from it, not some unspecified Animal (nor Animal'Class). So I want this to be possible:

   X : A := Make (A_F);  -- base obj from base factory
   Y : B := Make (B_F);  -- derived obj from derived fry
   Z_1 : A'Class := Make (A_F);  -- class-wide from base fry
   Z_2 : A'Class := Make (B_F);  -- class-wide from derived fry

All of them have real-life interpretations with any of the example use-cases that I have listed below. I can do all of them in C++.

> It cannot work in any language, even if full MD were supported, which would
> make your example possible. The pattern is just useless.

Useless?

- A Singer can sing a Song, but a Blues_Singer can sing a Blues_Song.
- I can get an Animal from an Animal_Shelter, but I can get a Cat from the Cat_Shelter (this is the Wikipedia example).
- A Coffee_Machine can make a Coffee, but a Special_Coffee_Machine can make a Special_Coffee.
- A Programmer can write a Program, but an Ada_Programmer can write an Ada_Program.
- (etc. billion of other such examples)

As I have already stated, every creational design patter can benefit from covariance on return type. I would not call this "useless".

> > This is *exactly* the definition of covariance, at least the one I know:
> 
> The notion of co- and contra-variance was given by Luca Cardelli. It is
> related strictly to inheritance <=> a hierarchy. Outside a hierarchy it is
> just meaningless.

You must have failed to read the Wikipedia articles that I have pointed.

> >> No OOPL I know can handle this.
> 
> > Have you heard about those niche and unpopular languages like C++ and Java? ;-)
> 
> Yes. They cannot handle this either.

You must have failed to read the Wikipedia articles that I have pointed.

> Usual technique in C++ and Ada is to use template or generic to produce the
> handle type.

Unrelated. Please focus on the examples that I have provided.

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


  reply	other threads:[~2014-08-10 20:55 UTC|newest]

Thread overview: 73+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-05 20:09 A bad counterintuitive behaviour of Ada about OO Victor Porton
2014-08-05 20:58 ` Simon Wright
2014-08-05 21:06   ` Victor Porton
2014-08-05 21:51     ` Niklas Holsti
2014-08-05 22:13       ` Victor Porton
2014-08-05 22:35   ` Victor Porton
2014-08-05 23:25     ` Adam Beneschan
2014-08-05 20:59 ` Dmitry A. Kazakov
2014-08-05 21:07   ` Victor Porton
2014-08-05 22:39     ` Shark8
2014-08-05 21:11   ` Victor Porton
2014-08-06  7:26     ` Dmitry A. Kazakov
2014-08-07  7:41       ` Maciej Sobczak
2014-08-07  8:50         ` Dmitry A. Kazakov
2014-08-08  7:54           ` Maciej Sobczak
2014-08-08  8:14             ` Dmitry A. Kazakov
2014-08-08 13:06               ` Maciej Sobczak
2014-08-08 13:22                 ` Dmitry A. Kazakov
2014-08-08 22:32                   ` Randy Brukardt
2014-08-09 16:11                   ` Maciej Sobczak
2014-08-09 16:48                     ` Dmitry A. Kazakov
2014-08-10 20:55                       ` Maciej Sobczak [this message]
2014-08-11  7:41                         ` Dmitry A. Kazakov
2014-08-11  7:58                           ` Maciej Sobczak
2014-08-11  8:23                             ` Dmitry A. Kazakov
2014-08-12  7:50                               ` Maciej Sobczak
2014-08-11 11:35                             ` G.B.
2014-08-08 22:26                 ` Randy Brukardt
2014-08-08  8:34             ` Shark8
2014-08-08 12:59               ` Maciej Sobczak
2014-08-08 22:37                 ` Randy Brukardt
2014-08-08 22:53                   ` Jeffrey Carter
2014-08-07  8:58         ` J-P. Rosen
2014-08-07  9:40           ` Dmitry A. Kazakov
2014-08-07 11:17             ` J-P. Rosen
2014-08-07 12:28               ` Dmitry A. Kazakov
2014-08-07 13:34                 ` J-P. Rosen
2014-08-07 16:10                   ` Dmitry A. Kazakov
2014-08-07 18:14                     ` Robert A Duff
2014-08-07 19:41                       ` Dmitry A. Kazakov
2014-08-07 20:53                         ` Robert A Duff
2014-08-08  7:43                           ` Dmitry A. Kazakov
2014-08-08  8:18                             ` Shark8
2014-08-08  7:45                     ` J-P. Rosen
2014-08-08  8:04                       ` Dmitry A. Kazakov
2014-08-08  8:55                         ` J-P. Rosen
2014-08-08  9:13                           ` Dmitry A. Kazakov
2014-08-08 10:01                             ` J-P. Rosen
2014-08-08 10:53                               ` Dmitry A. Kazakov
2014-08-08 10:56                                 ` Victor Porton
2014-08-08 12:00                                 ` J-P. Rosen
2014-08-08 13:11                                   ` Dmitry A. Kazakov
2014-08-08 13:53                                     ` J-P. Rosen
2014-08-08 20:23                                       ` Dmitry A. Kazakov
2014-08-07 20:29                   ` Shark8
2014-08-08  7:49                     ` J-P. Rosen
2014-08-08  8:12                       ` Shark8
2014-08-08  8:26                         ` Dmitry A. Kazakov
2014-08-08 11:10                           ` Shark8
2014-08-08 11:20                             ` Dmitry A. Kazakov
2014-08-08 19:34                               ` Shark8
2014-08-08 20:23                                 ` Dmitry A. Kazakov
2014-08-07 15:03           ` Jeffrey Carter
2014-08-08  7:48           ` Maciej Sobczak
2014-08-08  8:51             ` J-P. Rosen
2014-08-08 13:25               ` Maciej Sobczak
2014-08-08 13:34                 ` J-P. Rosen
2014-08-08 13:52                   ` Dmitry A. Kazakov
2014-08-08 14:21                     ` J-P. Rosen
2014-08-08 20:23                       ` Dmitry A. Kazakov
2014-08-08 22:08                     ` Randy Brukardt
2014-08-08 22:18                 ` Randy Brukardt
2014-08-06  4:50 ` Per Sandberg
replies disabled

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