comp.lang.ada
 help / color / mirror / Atom feed
From: Shark8 <OneWingedShark@gmail.com>
Subject: Re: A bad counterintuitive behaviour of Ada about OO
Date: Tue, 05 Aug 2014 16:39:57 -0600
Date: 2014-08-05T16:39:57-06:00	[thread overview]
Message-ID: <53dEv.527030$E36.206784@fx15.iad> (raw)
In-Reply-To: <lrrh23$6mh$2@speranza.aioe.org>

On 05-Aug-14 15:07, Victor Porton wrote:
> Pleas explain what exactly you mean saying "re-dispatch".

The wiki-book has a pretty good explanation:
http://en.wikibooks.org/wiki/Ada_Programming/Object_Orientation#Redispatching

The difference between Dispatching and non-Dispatching is, essentially, 
the same as that of static- and dynamic-linking -- Re-Dispatching is 
when the dispatching-call makes another dispatching call.

I'm probably not explaining it well but let's step-through -- given the 
following:

     Package Example is
         Type Base is tagged null record;
         Procedure Call_Op1  ( T1 : Base'Class ); -- A Dispatching Call
         Procedure Call_Op2  ( T1 : Base );   -- Not A Dispatching Call
         Procedure Operation ( T1 : Base );   -- Not A Dispatching Call

         Type Current is new Base with null record;
         Overriding Procedure Call_Op2 ( T1 : Current ); -- Not A 
Dispatching Call
         Overriding Procedure Operation( T1 : Current ); -- Not A 
Dispatching Call

         Type Child is new Current with null record;
         Overriding Procedure Call_Op2 ( T1 : Child );   -- Not A 
Dispatching Call
         Overriding Procedure Operation( T1 : Child );   -- Not A 
Dispatching Call
     End Example;

     Package Body Example is
         Procedure Call_Op1 ( T1 : Base'Class ) is
         begin
             T1.Operation; -- Re-Dispatching.
         end;

         Procedure Call_Op2 ( T1 : Base ) is
         begin
           Base'Class(T1).Operation; -- Dispatching
         end;

         Overriding Procedure Call_Op2 ( T1 : Current ) is
         begin
             Ada.Text_IO.Put_Line( "-- Current.Op2 --" );
             Ada.Text_IO.Put( ASCII.HT );
             Base'Class(T1).Operation;
         end;

         Overriding Procedure Call_Op2 ( T1 : Child ) is
         begin
             Ada.Text_IO.Put_Line( "-- Child.Op2 --" );
             Ada.Text_IO.Put( ASCII.HT );
             Base(T1).Call_Op2;
         end;


         Procedure Operation( T1 : Base       ) is
         begin
             Ada.Text_IO.Put_Line( "-- BASE --" );
         End Operation;

         Overriding Procedure Operation( T1 : Current ) is
         begin
             Ada.Text_IO.Put_Line( "-- CURRENT --" );
         End Operation;


         Overriding Procedure Operation( T1 : Child ) is
         begin
             Ada.Text_IO.Put_Line( "-- CHILD --" );
         End Operation;
     End Example;

The execution of
     declare
         X : Example.Child;
     begin
         X.Call_Op1;
         X.Call_Op2;
         Example.Current(X).Operation;
         Example.Current(X).Call_Op1;
         Example.Current(X).Call_Op2;
     end;
produces:
-- CHILD --
-- Child.Op2 --
	-- CHILD --
-- CURRENT --
-- CHILD --
-- Current.Op2 --
	-- CHILD --


  reply	other threads:[~2014-08-05 22:39 UTC|newest]

Thread overview: 73+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-05 20:09 A bad counterintuitive behaviour of Ada about OO Victor Porton
2014-08-05 20:58 ` Simon Wright
2014-08-05 21:06   ` Victor Porton
2014-08-05 21:51     ` Niklas Holsti
2014-08-05 22:13       ` Victor Porton
2014-08-05 22:35   ` Victor Porton
2014-08-05 23:25     ` Adam Beneschan
2014-08-05 20:59 ` Dmitry A. Kazakov
2014-08-05 21:07   ` Victor Porton
2014-08-05 22:39     ` Shark8 [this message]
2014-08-05 21:11   ` Victor Porton
2014-08-06  7:26     ` Dmitry A. Kazakov
2014-08-07  7:41       ` Maciej Sobczak
2014-08-07  8:50         ` Dmitry A. Kazakov
2014-08-08  7:54           ` Maciej Sobczak
2014-08-08  8:14             ` Dmitry A. Kazakov
2014-08-08 13:06               ` Maciej Sobczak
2014-08-08 13:22                 ` Dmitry A. Kazakov
2014-08-08 22:32                   ` Randy Brukardt
2014-08-09 16:11                   ` Maciej Sobczak
2014-08-09 16:48                     ` Dmitry A. Kazakov
2014-08-10 20:55                       ` Maciej Sobczak
2014-08-11  7:41                         ` Dmitry A. Kazakov
2014-08-11  7:58                           ` Maciej Sobczak
2014-08-11  8:23                             ` Dmitry A. Kazakov
2014-08-12  7:50                               ` Maciej Sobczak
2014-08-11 11:35                             ` G.B.
2014-08-08 22:26                 ` Randy Brukardt
2014-08-08  8:34             ` Shark8
2014-08-08 12:59               ` Maciej Sobczak
2014-08-08 22:37                 ` Randy Brukardt
2014-08-08 22:53                   ` Jeffrey Carter
2014-08-07  8:58         ` J-P. Rosen
2014-08-07  9:40           ` Dmitry A. Kazakov
2014-08-07 11:17             ` J-P. Rosen
2014-08-07 12:28               ` Dmitry A. Kazakov
2014-08-07 13:34                 ` J-P. Rosen
2014-08-07 16:10                   ` Dmitry A. Kazakov
2014-08-07 18:14                     ` Robert A Duff
2014-08-07 19:41                       ` Dmitry A. Kazakov
2014-08-07 20:53                         ` Robert A Duff
2014-08-08  7:43                           ` Dmitry A. Kazakov
2014-08-08  8:18                             ` Shark8
2014-08-08  7:45                     ` J-P. Rosen
2014-08-08  8:04                       ` Dmitry A. Kazakov
2014-08-08  8:55                         ` J-P. Rosen
2014-08-08  9:13                           ` Dmitry A. Kazakov
2014-08-08 10:01                             ` J-P. Rosen
2014-08-08 10:53                               ` Dmitry A. Kazakov
2014-08-08 10:56                                 ` Victor Porton
2014-08-08 12:00                                 ` J-P. Rosen
2014-08-08 13:11                                   ` Dmitry A. Kazakov
2014-08-08 13:53                                     ` J-P. Rosen
2014-08-08 20:23                                       ` Dmitry A. Kazakov
2014-08-07 20:29                   ` Shark8
2014-08-08  7:49                     ` J-P. Rosen
2014-08-08  8:12                       ` Shark8
2014-08-08  8:26                         ` Dmitry A. Kazakov
2014-08-08 11:10                           ` Shark8
2014-08-08 11:20                             ` Dmitry A. Kazakov
2014-08-08 19:34                               ` Shark8
2014-08-08 20:23                                 ` Dmitry A. Kazakov
2014-08-07 15:03           ` Jeffrey Carter
2014-08-08  7:48           ` Maciej Sobczak
2014-08-08  8:51             ` J-P. Rosen
2014-08-08 13:25               ` Maciej Sobczak
2014-08-08 13:34                 ` J-P. Rosen
2014-08-08 13:52                   ` Dmitry A. Kazakov
2014-08-08 14:21                     ` J-P. Rosen
2014-08-08 20:23                       ` Dmitry A. Kazakov
2014-08-08 22:08                     ` Randy Brukardt
2014-08-08 22:18                 ` Randy Brukardt
2014-08-06  4:50 ` Per Sandberg
replies disabled

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