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 15:11:48 +0200
Date: 2014-08-08T15:11:48+02:00	[thread overview]
Message-ID: <1agzjp96wjs5e$.x9rvr6tl743l$.dlg@40tude.net> (raw)
In-Reply-To: ls2e4t$7sg$1@dont-email.me

On Fri, 08 Aug 2014 14:00:26 +0200, J-P. Rosen wrote:

> Le 08/08/2014 12:53, Dmitry A. Kazakov a écrit :
>>> Moreover, classification is used in mathematics for the theory of
>>> numbers, which is not relevant to practical usage of numbers.
>> 
>> Having integers ordered is unpractical? Being them additive has no usage?
>> 
> 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?

>> I don't know which relationships are "conceptual" and which are not.
>> 
>> generic
>>    type Element_Type is private;
>>    with function "<" (Left, Right : Element_Type) return Boolean is <>;
>>    with function "=" (Left, Right : Element_Type) return Boolean is <>;
>> package Ada.Containers.Ordered_Sets is
>> 
>> Isn't all types acceptable as Element_Type a "conceptual" class?
>> 
> I argue they are not. If you provide an operation that operates on a
> class wide type, then it can be used only on types belonging to the
> class, which means there is a dependency between these types.

I don't see any dependency, but that was not the question. It was - do
private types with "<" and "=" form a "conceptual" class. Do acceptable
actual types of a generic form one?

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

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

> There must be some /conceptual/ dependence, i.e. some "is-a" dependency.
> That's what I meant: a generic "can_speak" function that could be
> instantiated on humans or parrots would be much less disturbing - to my
> taste.

It is incredibly disturbing because there is no difference between:

   function Can_Speak (X : Thing) return Boolean;

and

   function Is_Empty (X : Thing) return Boolean;

This is exactly the point why generics are untyped in their heart. 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. 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.

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


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