From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-0.3 required=5.0 tests=BAYES_00, REPLYTO_WITHOUT_TO_CC autolearn=no autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!news.eternal-september.org!news.eternal-september.org!news.eternal-september.org!feeder.eternal-september.org!aioe.org!.POSTED!not-for-mail From: "Dmitry A. Kazakov" Newsgroups: comp.lang.ada Subject: Re: A bad counterintuitive behaviour of Ada about OO Date: Fri, 8 Aug 2014 15:11:48 +0200 Organization: cbb software GmbH Message-ID: <1agzjp96wjs5e$.x9rvr6tl743l$.dlg@40tude.net> References: <932kntuq5rrr.8sumwibqrufn.dlg@40tude.net> <1ohy7vnbntskq$.h139ov04mlxu$.dlg@40tude.net> <17wt4z4suijym$.fibkp6sw5itz$.dlg@40tude.net> <1k6qcfme6203h.1jon846ebrywu$.dlg@40tude.net> Reply-To: mailbox@dmitry-kazakov.de NNTP-Posting-Host: pFv5JukiA5DRwd1gSNRC4g.user.speranza.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8bit X-Complaints-To: abuse@aioe.org User-Agent: 40tude_Dialog/2.0.15.1 X-Notice: Filtered by postfilter v. 0.8.2 Xref: news.eternal-september.org comp.lang.ada:21552 Date: 2014-08-08T15:11:48+02:00 List-Id: 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