comp.lang.ada
 help / color / mirror / Atom feed
From: "J-P. Rosen" <rosen@adalog.fr>
Subject: Re: A bad counterintuitive behaviour of Ada about OO
Date: Fri, 08 Aug 2014 15:53:52 +0200
Date: 2014-08-08T15:53:52+02:00	[thread overview]
Message-ID: <ls2kpj$l3e$1@dont-email.me> (raw)
In-Reply-To: <1agzjp96wjs5e$.x9rvr6tl743l$.dlg@40tude.net>

Le 08/08/2014 15:11, Dmitry A. Kazakov a écrit :
>> Yes of course, but the /theory/ of it, and especially group theory etc.
>> that you mentioned is not a programmer's concern.
> 
> How so? If integer is not ordered there is no "<" defined, if there is no
> "<" how are you going to have an ordered map with integer keys?
Well, of course the computer Integer has "<", but to use it I don't need
to know (nor do I give a damn) that it is a group, and that other types
are also groups.


>> A generic can be applied to types that are not related in any way.
> 
> They are related in exactly the way that this generic can be applied to
> them. Is the feature of being applicable in a generic relevant for
> programmers? I think it is. 
The point is that of logical dependency. If I have a type T, and want to
use an operation defined on class C, I have to make my type a member of
C. And C has other members, that become somehow the brothers of T. LSP
means that they can be interchanged in some situations.

With a generic G, of course T has to match the contract imposed by the
formals of G, but there is no connection to other types that may
instantiate the same generic.

Now, you can define the "class of all types that can instantiate G".
Possible, but useless.

>> This reminds me of a (bad) example of inheritance I once saw in a book:
>> the class "parrot" inherited from the class "human" because it needed
>> the method "can_speak". I'm somewhat uncomfortable with the notion that
>> a parrot is a special kind of human ;-). Well, it's a bad example
>> because inheritance should not be used just to grab any method you need.
> 
> It is bad design, because the class of things that can speak is not the
> class of humans. Parrots and humans certainly participate in some classes,
> e.g. in Chordates, Tetrapoda etc.
The point is that often people write a method on a class, and then
inherit from it because they want to reuse a method. Inheritance is used
for "uses" relationship, not for "is-a". It is an abuse of inheritance,
but very frequent (even in basic Java classes).

> This is exactly the point why generics are untyped in their heart.
In the sense that they can be applied to any kind of type that matches
the contract, yes. And that's a good thing.

> There is
> tight relationship between operations =, /=, <, >, >=, <=, 'Prev, 'Next of
> an ordered set. This is what makes it such a thing. Inheriting to Ordered
> tells to the reader all this in just one source line. Moreover, it allows
> the compiler to check if the manifested type is indeed ordered and even
> prove some of this like x=y <=> not x/=y. 
Certainly not. Inheriting from Ordered guarantees that all these
operations are available, but say nothing about the semantics. If you
want to add semantics, use type invariants and the like.

> Compare this with generics. They
> just name some operations and the programmer should guess about the purpose
> of what the actual type should be. Yes there is no dependency ... on the
> application domain. Just an ad-hoc mess.
> 
It's not a mess. It's generality. The actual type should be anything
that matches the contract.

-- 
J-P. Rosen
Adalog
2 rue du Docteur Lombard, 92441 Issy-les-Moulineaux CEDEX
Tel: +33 1 45 29 21 52, Fax: +33 1 45 29 25 00
http://www.adalog.fr

  reply	other threads:[~2014-08-08 13:53 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
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 [this message]
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