From: "amado.alves" <amado.alves@netcabo.pt>
To: <comp.lang.ada@ada-france.org>
Subject: MI ammunition : linked lists
Date: Thu, 6 Nov 2003 16:32:16 -0000
Date: 2003-11-06T16:32:16+00:00 [thread overview]
Message-ID: <mailman.293.1068136383.25614.comp.lang.ada@ada-france.org> (raw)
A very common programming task where multiple inheritance (MI) would be handy: implementation of doubly linked lists.
A linked list is a chain of nodes. The first node links to the second, the last node links to the penultimate, and each of the others nodes links to both the previous and the next. (Each node usually also carries a payload, which we can ignore here.)
First <-----> Second <-----> ... <-----> Penultimate <-----> Last
Often (always?) a non OOP design is used with only one type for all kinds of nodes, with null values in the unused slots:
___________ ______ ______ ___________
| | | | | | | |
| Prev=null |<-----Prev |<--- ... <-----Prev |<-----Prev |
| Next---------->| Next-----> ... --->| Next----->| Next=null |
|___________| |______| |______| |___________|
An OOP design does away with the ugly nulls (however it introduces one-of-a-kind objects, which also some people consider ugly):
______ ______ ______
______ | | | | | |
| |<-----Prev |<--- ... <-----Prev |<-----Prev |
| Next----->| Next-----> ... --->| Next----->|______|
|______| |______| |______|
It is clear that the middle nodes combine the attributes of the first and last nodes. This is where linguistic MI could help:
type Node is tagged ...;
type Node_Ptr is access Node'Class;
type First_Node is new Node with record
Next : Node_Ptr;
end record;
type Last_Node is new Node with record
Prev : Node_Ptr;
end record;
type Middle_Node is new First_Node with Last_Node;
Of course the alternative is no big deal, syntactically:
type Middle_Node is new Node with record
Prev : Node_Ptr;
Next : Node_Ptr;
end record;
But, semantically, MI would allow conversions between Middle_Node and any the other two extended types. Whether this would be useful for linked lists remains to be ascertained. I confess I have not implemented them this way yet.
Well, just a thought for those with too much free time on their hands ;-)
next reply other threads:[~2003-11-06 16:32 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-11-06 16:32 amado.alves [this message]
2003-11-06 16:46 ` MI ammunition : linked lists Stephen Leake
2003-11-06 17:15 ` Frank J. Lhota
2003-11-08 10:27 ` Dmitry A. Kazakov
2003-11-06 17:16 ` Jean-Pierre Rosen
2003-11-06 18:15 ` Wes Groleau
2003-11-06 21:03 ` Simon Wright
2003-11-07 10:39 ` Dmitry A. Kazakov
2003-11-07 10:29 ` Dmitry A. Kazakov
2003-11-10 14:51 ` Lutz Donnerhacke
2003-11-10 17:52 ` Marius Amado Alves
2003-11-11 9:32 ` Lutz Donnerhacke
2003-11-11 12:24 ` Marius Amado Alves
2003-11-11 12:58 ` Lutz Donnerhacke
2003-11-11 16:09 ` Robert I. Eachus
2003-11-11 17:11 ` Marius Amado Alves
2003-11-12 9:21 ` Lutz Donnerhacke
-- strict thread matches above, loose matches on Subject: below --
2003-11-06 17:26 amado.alves
2003-11-06 17:33 amado.alves
2003-11-06 19:01 amado.alves
2003-11-11 18:38 ` Georg Bauhaus
2003-11-11 21:27 ` Marius Amado Alves
2003-11-12 0:23 ` Georg Bauhaus
2003-11-12 11:29 amado.alves
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox