comp.lang.ada
 help / color / mirror / Atom feed
From: "Jeffrey R. Carter" <spam.jrcarter.not@spam.not.acm.org>
Subject: Re: I'm facing an issue with: call to abstract procedure must be dispatching
Date: Tue, 8 Dec 2015 10:30:56 -0700
Date: 2015-12-08T10:30:56-07:00	[thread overview]
Message-ID: <n473vt$jdu$1@dont-email.me> (raw)
In-Reply-To: <8bc7fd76-f00a-4eea-9715-470af028fc84@googlegroups.com>

On 12/08/2015 09:45 AM, Serge Robyns wrote:
> 
> I've been trying to get my head around a way to create a solution where the storage method can be changed.

In your approach, IIUC, you would change the Insert procedures for each of the
types to change the storage method. You are on the right track, but are confused
by the added complexity of using programming by extension. The typical way to do
this in Ada is something like

with T1_Ops;
with T2_Ops;
...
package Storage is
   procedure Put (Item : in T1_Ops.T1);

   procedure Put (Item : in T2_Ops.T2);

   ...
end Storage;

The bodies of the Put procedures correspond to your Insert procedures. (You can
call them Insert, too, if you like, but I once heard it asserted that a
correctly designed Ada program has 90% of its operations named Put or Get.)

This is then used as

with Storage;

...

Storage.Put (Item => Current_Item);

which is the same regardless of the type of the item being stored. To change the
storage method, you change the body of Storage.

Note that programming by extension is neither necessary nor desirable for this.

-- 
Jeff Carter
"Your mother was a hamster and your father smelt of elderberries."
Monty Python & the Holy Grail
06

  parent reply	other threads:[~2015-12-08 17:30 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-08 16:45 I'm facing an issue with: call to abstract procedure must be dispatching Serge Robyns
2015-12-08 16:59 ` G.B.
2015-12-08 17:04 ` Dmitry A. Kazakov
2015-12-08 17:24   ` Serge Robyns
2015-12-08 17:42     ` Dmitry A. Kazakov
2015-12-08 18:00       ` Serge Robyns
2015-12-08 18:22         ` Dmitry A. Kazakov
2015-12-08 20:21           ` Serge Robyns
2015-12-08 21:08             ` Dmitry A. Kazakov
2015-12-08 21:55               ` Serge Robyns
2015-12-08 22:43                 ` Serge Robyns
2015-12-08 22:55                   ` Jeffrey R. Carter
2015-12-09 23:03                     ` Randy Brukardt
2015-12-10  8:38                       ` Serge Robyns
2015-12-10 23:43                         ` Randy Brukardt
2015-12-09  8:48                 ` Dmitry A. Kazakov
2015-12-09 10:53               ` G.B.
2015-12-09 12:03                 ` Dmitry A. Kazakov
2015-12-09 13:42                   ` G.B.
2015-12-09 14:23                     ` Dmitry A. Kazakov
2015-12-08 22:55             ` Jeffrey R. Carter
2015-12-08 23:04               ` Serge Robyns
2015-12-08 23:42                 ` Jeffrey R. Carter
2015-12-09 13:40                 ` Jere
2015-12-09 13:48                   ` G.B.
2015-12-09 15:33                     ` Jere
2015-12-13 21:37                 ` Shark8
2015-12-14  2:20                   ` Jeffrey R. Carter
2015-12-15  7:26                     ` Shark8
2015-12-08 17:30 ` Jeffrey R. Carter [this message]
2015-12-08 17:48   ` Serge Robyns
2015-12-08 18:46     ` Jeffrey R. Carter
2015-12-08 20:28       ` Serge Robyns
2015-12-08 22:20     ` Simon Wright
replies disabled

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