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: Fri, 8 Aug 2014 22:23:16 +0200
Date: 2014-08-08T22:23:16+02:00	[thread overview]
Message-ID: <9d40adts9g61$.1l95gb4s6ka9g$.dlg@40tude.net> (raw)
In-Reply-To: ls2kpj$l3e$1@dont-email.me

On Fri, 08 Aug 2014 15:53:52 +0200, J-P. Rosen wrote:

> 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.

The question was about maps. Should maps be restricted strictly integer
keys?

>>> 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.

So are formal generic types. They are somehow brothers and they can be
interchanged in instantiations. You can instantiate a generic with one type
or another.

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

And having a useless class makes an advantage over having a useful class? I
don't understand the logic.
 
>>> 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.

While you don't want to reuse any operations defined in a generic package.
People put operations into generic packages out feeling of pure joy. No bad
intentions to reuse them anyhow. Is that your point?

>> 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.

Sure I can. And I can reuse Ordered interface in other places, probably put
it into the standard library. And programmers can accustom to it as they
are to built-in scalar types.

>> 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.

The "contract" is a mess. It is not much better than C++ template
"contract," anything that passes compilation is OK. Contracts must be
verifiable, have predictable consequences, recognizable from the
application domain.

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


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