TEAM-ADA Archives

Team Ada: Ada Programming Language Advocacy

TEAM-ADA@LISTSERV.ACM.ORG

Options: Use Forum View

Use Monospaced Font
Show Text Part by Default
Show All Mail Headers

Message: [<< First] [< Prev] [Next >] [Last >>]
Topic: [<< First] [< Prev] [Next >] [Last >>]
Author: [<< First] [< Prev] [Next >] [Last >>]

Print Reply
Subject:
From:
Matthew Heaney <[log in to unmask]>
Reply To:
Matthew Heaney <[log in to unmask]>
Date:
Wed, 14 Oct 1998 21:22:22 GMT
Content-Type:
text/plain
Parts/Attachments:
text/plain (39 lines)
> >This illustrates a fundamental advantage of Ada:  It is difficult to
> >write correct programs that have typos.
>
> I agree in general, but there is one pitfall in the case of OOP (which by
> the way is not unique to Ada).  If you misspell the name of a subprogram
> intended to override an otherwise implicitly inherited operation, then you
> do not override it even  though you think you have.  Example:

[snip]

> The dynamic binding at (*) invokes the Student version of Financial_Aid,
> which is probably not what was intended.  To some extent the need to repeat
> the subprogram specification in the package body reduces the risk of this
> effect, since maybe the typo will be spotted if it appears twice, but it is
> still a potential "gotcha".

But this problem is easily solved by required that operations of a
derived type that override those of the parent be explicitly identified
as such:

type T is new Controlled with ...;

override procedure Initialise (O : in out T);

(note the mis-spelling -- it should be -ize)

The error would indeed be caught by the compiler.

The programmer should state his intent on how he intends for an entity
to be used, and the compiler should check that his actual use of the
entity agrees with his stated intent.  This is exactly what happens
already when you declare a type.

Although I'm generally happy with Ada95, I feel that not requiring
programmers to explicitly state that an operation overrides that of its
parent, is a language flaw.

Matt

ATOM RSS1 RSS2