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: Sat, 9 Aug 2014 09:11:43 -0700 (PDT)
Date: 2014-08-09T09:11:43-07:00	[thread overview]
Message-ID: <4a3996f3-666e-404a-ad8b-ff1832751787@googlegroups.com> (raw)
In-Reply-To: <2extr7bydwfw.tcda12f9xnq9.dlg@40tude.net>

On Friday, August 8, 2014 3:22:56 PM UTC+2, Dmitry A. Kazakov wrote:

> >> I still do not understand the example.
> 
> > http://en.wikipedia.org/wiki/Covariant_return_type
> 
> type A is tagged null record;
> function getFoo return A;

Wrong. getFoo should have a factory as a parameter (in the Wikipedia example this is hidden as "this" parameter). More complete example would be:

   package Products is
      type A is tagged null record;
      type B is new A with null record;
   end Products;
   
   package Factories is
      type A_Factory is tagged null record;
      function Make (AF : in A_Factory) return Products.A;

      type B_Factory is tagged null record;
      overriding function Make (BF : in B_Factory) return Products.B;
   end Factories;

and GNAT says:

   subprogram "Make" is not overriding
   not type conformant with declaration at line XXX
   return type does not match

As Randy pointed out, this cannot work in Ada. It's not even a matter of "fixing" something.

> No dispatch, no covariance.

Feel free to make up your own definitions.

> If you are in the hierarchy of the factory
> type, there cannot be any covariance in an unrelated hierarchy.

This is *exactly* the definition of covariance, at least the one I know:

http://en.wikipedia.org/wiki/Covariance_and_contravariance_%28computer_science%29#Covariant_method_return_type

> The only case where this may happen is parallel type hierarchies when two
> types are inherited synchronously, e.g.
> 
>    type Object is tagged ...
>    type Handle is tagged ...
> 
>    function Access (X : Handle_To_Object) return Object;
> 
>    type New_Object is new Object with ...
> 
> must produce
> 
>    type New_Handle is new Handle with ...
> 
> and
> 
>    function Access (X : New_Handle) return New_Object;

Yes.

> No OOPL I know can handle this.

Have you heard about those niche and unpopular languages like C++ and Java? ;-)

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


  parent reply	other threads:[~2014-08-09 16:11 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 [this message]
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
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