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.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM autolearn=unavailable autolearn_force=no version=3.4.4 X-Received: by 10.157.80.39 with SMTP id a39mr11622290oth.92.1495460613783; Mon, 22 May 2017 06:43:33 -0700 (PDT) X-Received: by 10.157.84.44 with SMTP id j44mr490595oth.16.1495460613747; Mon, 22 May 2017 06:43:33 -0700 (PDT) Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!news.eternal-september.org!news.eternal-september.org!feeder.eternal-september.org!news.glorb.com!67no1374414itx.0!news-out.google.com!m134ni5824itb.0!nntp.google.com!67no1374406itx.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: comp.lang.ada Date: Mon, 22 May 2017 06:43:33 -0700 (PDT) In-Reply-To: Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=84.131.51.223; posting-account=rmHyLAoAAADSQmMWJF0a_815Fdd96RDf NNTP-Posting-Host: 84.131.51.223 References: <4a47e4cd-829c-4451-abf1-82cf60b67706@googlegroups.com> <9cdf04e6-123e-4bd9-b466-77aad00d61bb@googlegroups.com> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <7d8b2aac-0a71-4f0f-b227-f4de74a3e3c0@googlegroups.com> Subject: Re: Preventing private procedure visibility being made public through extension From: AdaMagica Injection-Date: Mon, 22 May 2017 13:43:33 +0000 Content-Type: text/plain; charset="UTF-8" Xref: news.eternal-september.org comp.lang.ada:46852 Date: 2017-05-22T06:43:33-07:00 List-Id: Am Sonntag, 21. Mai 2017 23:07:13 UTC+2 schrieb Dmitry A. Kazakov: > In Ada a non-primitive operation could be disallowed by declaring it > abstract, just the same. > > An Ada example corresponding to yours is this: > > package Base is > type Base_Type is null record; > procedure Something (X : in out Base_Type); This is a primitive operation of Base_Type. > end Base; > > package Derived is > type Derived_Type is new Base_Type; Because of being primitive, it's inherited here - and you can override it. > procedure Something (X : in out Derived_Type) is abstract; The difference is that this follows the Ada83 derivation rules, which are quite different from the Ada95 rules of tagged types. Nevertheless, operations like Something are called "primitive operations". Also the optional overriding indicators can be used on Ada83 derivation.