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
next prev parent 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