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 --
next prev parent 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