comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: A bad counterintuitive behaviour of Ada about OO
Date: Mon, 11 Aug 2014 10:23:09 +0200
Date: 2014-08-11T10:23:09+02:00	[thread overview]
Message-ID: <v1q6bffczns2.yysly6razyg3$.dlg@40tude.net> (raw)
In-Reply-To: 6c67704a-d399-433d-bd8e-4566e79defaf@googlegroups.com

On Mon, 11 Aug 2014 00:58:12 -0700 (PDT), Maciej Sobczak wrote:

> W dniu poniedziałek, 11 sierpnia 2014 09:41:09 UTC+2 użytkownik Dmitry A. Kazakov napisał:
> 
> In other words, this has to work as well:
> 
> procedure Use_Specific_Factory (F : in Specific_Factory) is
> 
>    SP : Specific_Product := F.Make_Product;

And it worked in the example I provided.

> And there is no way to make *both* work in Ada. You can get one or the
> other but not both.

Of course there is a way. If you have two operations with different
profiles you can overload them.
 
>> Where is a problem? Do this (in another package):
>> 
>>    not overriding
>>       function Make (F : not null access B_Factory) return B;
>> 
>> Observe: not overriding.
> 
> And this is where your idea breaks down. The Make operation *must* be
> overriding, otherwise I will not be able to use Factory'Class.

You don't need Factory'Class since the return type is fixed to B.

If it were B'Class you could have a hierarchy of
B-and-its-descendant-factories. But that won't be a hierarchy of
A-factories or A-and-its-descendant-factories.

You need something to vary to have a hierarchy. Which is why it is called
covariance or contravariance. Varying could be Factory or Product or both
(MD). No hierarchy, no variance.

>>> Useless?
>> 
>> Yes, useless. If you know all types involved you call a specific subprogram
>> or simply declare the object. Work done.
> 
> I might not know the specific factory type.

No, you know it, because the only factory that returns B is the B-factory
and nowhere in your examples you have one with a class-wide factory and a
specific product type. If you wrote one, you would see what is wrong with
your idea:

procedure Foo (F : A_Factory'Class) is
   X : B := Make (F);

This does not work because it could be *any* factory, e.g. an A-factory.
You *must* specify the factory type:

procedure Foo (F : A_Factory'Class) is
   X : B := B (Make (B_Factory (F)));

MD would do this automatically.

But, again, the whole exercise is useless. If you know it must be B, there
is no need in any factories:

   X : B;

>> Factories are used *only* when types are unknown in advance.
> 
> Not only. I might want to use specific factory from the hierarchy of
> factories, too.

The type of the product is unknown when a factory is used, that is all and
single idea of having a factory.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de

  reply	other threads:[~2014-08-11  8:23 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
2014-08-11  7:41                         ` Dmitry A. Kazakov
2014-08-11  7:58                           ` Maciej Sobczak
2014-08-11  8:23                             ` Dmitry A. Kazakov [this message]
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