comp.lang.ada
 help / color / mirror / Atom feed
From: elroy.jpl.nasa.gov!sdd.hp.com!caen!uvaarpa!software.org!blakemor@ames.arc .nasa.gov  (Alex Blakemore)
Subject: Re: Invoking Inherited Routines in Ada9x
Date: 11 Dec 91 15:57:58 GMT	[thread overview]
Message-ID: <1991Dec11.155758.6327@software.org> (raw)

In article <9112051716.AA04270@merengue.mpr.ca> ssmith@MPRGATE.MPR.CA (Shaun Sm
ith) writes:
>  In Ada9x, does [sic] you know how a subclass subprogram can invoke the
>subprogram with the same name defined by an ancestor.  This is achieved
>in Smalltalk by sending a message to "super".  By sending to "super"
>rather than "self", the next implementation of a method in the
>inheritance hierarchy is invoked rather than the one supplied by the
>class of the current object.  Is that clear?

This is described in the mapping rationale document version 3.1
August 1991.  An example in section 4.2.3.1 pages 4-10 to 4-11
shows how to call a subprogram can invoke the subprogram which
it is overriding using explicit type conversion.
An abbreviated version follows (I have left out some lines,
but added none other than comments):

package new_system is
  type alert is tagged  -- dispatching (polymorphic?) type
    record
      message : text;
    end record;
  procedure handle (A : in out alert);
end new_system;

with new_system;
package medium_level is
  type medium_alert is new new_system.alert with -- Ada9X type extension
    record
      action_officer : person;
     end record;
  procedure handle (MA : in out medium_alert);
end medium_level;

package body medium_level is
  use new_system;
  procedure handle (MA : in out medium_alert) is
  begin
    handle(alert(ma));  -- calls new_system.handle
    ma.action_officer := assign_volunteer;
  end handle;
end medium_level;

For more info read the mapping rationale and mapping specifications
douments from ajpo.sei.cmu.edu (read the rational first)

>C++'s solution to this requirment results in brittle code since one has to
>specifically identify the parent class which supplies the next most
>specific implementation of a member function (method).

Ada's solution seems similar to C++'s in that the subclass must
name the superclass to invoke the parent method (using OO speak)
I assume you find that brittle because it makes it difficult
to rearrange the inheritance hierarchy ? perhaps to add a new 
intermediate level.

On the other hand this solution fits with Ada83 syntax and
semantics well.  Explicit type conversion allows the Ada83
overloading to resolve at compile time which subprogram to invoke.

If you have a better suggestion, post it to or
send it to the people who can do something about it at
ada9x-mrt@inmet.inmet.com

The mapping rationale claims near the end of that section:
"Each body for HANDLE encloses just the code relevant to the type,
and delegates additional processing to an ancestor with explicit
type conversion.  This is more flexible than the super pseudo-variable
of Smalltalk-80 and retains static type checking."

>In addition, isn't is possible to define an
>arbitrary number of classes within a package.

Yes just as it is possible to declare an arbitrary number
of types within a package.  Sometimes that is useful, but that
doesnt mean it is always good design.  I always try to put one
ADT per package as a rule of thumb, perhaps with some supporting types.
I imagine adding inheritance wont change that.

By the way, a type class in Ada9X is SET of types
which share common operations and are organized in a class
hierarchy (tree).  This is different than the normal OO
definition of class which corresponds mode closely to an
Ada9X type.
-- 
---------------------------------------------------------------------
Alex Blakemore           blakemore@software.org        (703) 742-7125
Software Productivity Consortium  2214 Rock Hill Rd, Herndon VA 22070

             reply	other threads:[~1991-12-11 15:57 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1991-12-11 15:57 Alex Blakemore [this message]
  -- strict thread matches above, loose matches on Subject: below --
1991-12-10 15:42 Invoking Inherited Routines in Ada9x Larry Maturo
1991-12-05 17:16 Shaun Smith
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox