comp.lang.ada
 help / color / mirror / Atom feed
From: elroy.jpl.nasa.gov!swrinde!cs.utexas.edu!mars.tsd.arlut.utexas.edu!larry@ ames.arc.nasa.gov  (Larry Maturo)
Subject: Re: Invoking Inherited Routines in Ada9x
Date: 10 Dec 91 15:42:32 GMT	[thread overview]
Message-ID: <1991Dec10.154232.7723@titan.tsd.arlut.utexas.edu> (raw)

In article <9112051716.AA04270@merengue.mpr.ca> ssmith@MPRGATE.MPR.CA (Shaun Sm
ith) writes:
>
>   I'm not a member of the mailing list, but since ``Dear Ada'' isn't
>entertaining 9X questions as yet she/he recommended I mail to it to find
>an answer to my question.
>
>  In Ada9x, does 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?
>
>Here's the scenario in C++:
>
>eg.     class A {
> 	  virtual void foo(); // virtual means can be redefined by subclasses
> 	}
>
>	class B : public C {
> 	  void foo(); // "virtualness" inherited
>  	}
>
>	class C : public B {
> 	  void foo(); // "virtualness" inherited
>  	}
>
>
>	// In class C implementation file
>	void C::foo() {
>	   B::foo(); // must qualify the inherited member function with the
>		     // name of the parent which defines it.
>	}
>
>
>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).
>
>Back to my question.  I've had a look through the Ada9x documentation
>and can't find anything about how this will be done.   One person
>familiar with Ada suggested that perhaps the package name could be used
>to specify which class's implementatation of "foo" was desired.  This
>suffers from C++`s problem.  In addition, isn't is possible to define an
>arbitrary number of classes within a package.
>
>If someone knows the answer, or which document and section to look in,
>please let me know (by email since I'm not on the list).  I'm just
>trying to get a handle on how Ada9x approaches support for
>object-oriented programming.
>
>       Shaun
>
>Shaun M. Smith                  | ssmith@mprgate.mpr.ca
>MPR Teltech Ltd.                | mprgate.mpr.ca!ssmith@uunet.uu.net
>8999 Nelson Way, Burnaby, BC    | ssmith%mprgate.mpr.ca@relay.ubc.ca
>Canada, V5A 4B5, (604) 293-5345 | 
>


I have heard somewhere that Ada 9X might have handle object oriented things
the way Oberon 2 does.  If so, in Oberon-2 the above is handled by using a
caret after a routine name to refer to it's anscestor routine so the above in
Oberon 2 would be something like the below (note: I have never programmed in
Oberon-2 so this is approximate at best):


TYPE A : RECORD (* The base type *)
           I:INTEGER;
           B:BOOLELAN;
         END;

TYPE B : RECORD (A) (* Extends A *)
           R: REAL;
         END;

TYPE C : RECORD (B) (* Extends B *)
           C : CHAR;
         END;

PROCEDURE foo (p1:A) (parameter list for foo); (* This foo bound to TYPE A *)
BEGIN
  ...
END foo;


PROCEDURE foo (p2:B) (parameter list for foo); (* This foo bound to TYPE B *)
BEGIN
  ...
END foo;


PROCEDURE foo (p3:C) (x:A); (* This foo bound to TYPE C with parameter of type 
A *)
BEGIN
  foo^(x);  (* This invokes the foo bound to TYPE A *)
END foo;



I'd be interested to see if Ada 9X is indeed implementing OOP this way.  Any
comments?

+-----------------------------------+----------------------------------------+
|                                   |                                        |
| Larry Maturo                      | Opinions expressed herein must be      |
| Applied Research Laboratories     | yours, neither I nor my employer have  |
| University of Texas at Austin     | any.                                   |
| P.O. Box 8029                     +----------------------------------------+
| Austin, Texas 78713-8029          |                                        |
|                                   | When you're as great as I am it's hard |
| larry@titan.tsd.arlut.utexas.edu  | to be modest, but I succeed where      |
|                                   | others fail.                           |
+-----------------------------------+----------------------------------------+

             reply	other threads:[~1991-12-10 15:42 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1991-12-10 15:42 Larry Maturo [this message]
  -- strict thread matches above, loose matches on Subject: below --
1991-12-11 15:57 Invoking Inherited Routines in Ada9x Alex Blakemore
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