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=-1.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,7508aa0d80b8bf66 X-Google-Attributes: gid103376,public From: "Matthew Heaney" Subject: Re: Inheritance and Polymorphism in Ada !! Date: 1999/10/15 Message-ID: <38077a53_4@news1.prserv.net>#1/1 X-Deja-AN: 537185525 Content-transfer-encoding: 7bit References: <7u64k3$l1d$1@hiline.shinbiro.com> <3806DC34.1513E8B1@frqnet.de> Content-Type: text/plain; charset="US-ASCII" X-Complaints-To: abuse@prserv.net X-Trace: 15 Oct 1999 19:02:43 GMT, 129.37.62.187 Organization: Global Network Services - Remote Access Mail & News Services Mime-version: 1.0 Newsgroups: comp.lang.ada Date: 1999-10-15T00:00:00+00:00 List-Id: In article <3806DC34.1513E8B1@frqnet.de> , Andreas Winckler wrote: > Yes, but in my opinion polymorphism is kind of restricted in Ada. No, there is no restriction. > See line 16, the type of the referenced object must be known in advance. > With "pointer.second_field :=1" the compiler fails. It seems that the > strong typing restricts the features of polyormism in Ada. Any comments? "Class-wide" programming means programming against all the types in the class. When you manipulate an object whose type is Type_A'Class, then what you're saying is you only care about those attributes that are common to ALL types. The field "second_field" is not common to all types in the class Type_A'Class, so it doesn't make any sense to complain you can't automatically see it. If you're interested in that field, then obviously you want an object whose type is Type_B'Class, or just Type_B. > Am I wrong? Yes. > However, when it comes to real_world_applications like the air traffic > control systems I do, polymorphism and dynamic memory allocation is a > DO_NOT anyway. Yes, it's true that dynamic memory allocation isn't allowed, but Ada was designed to that you don't need dynamic memory allocation. There was no reason for you to put the object on the heap. You could have said just as easily: Object : Type_A'Class := Type_B'(1, 2); No heap required. Of course, you don't have to declare you're objects as class-wide, meaning dynamic dispatch does *not* occur, which means you really *can* use tagged types in safety-critical systems. For example: Object : Type_B := (1, 2); -- Why stop at evolution and cosmology, though? Let's make sure that the schoolkids of Kansas get a really first-rate education by loosening up the teaching standards for other so-called scientific ideas that are, after all, just theories. The atomic theory, for example. The theory of relativity. Heck, the Copernican theory--do we really know that the universe doesn't revolve around the earth? John Rennie, Scientific American, Oct 1999