comp.lang.ada
 help / color / mirror / Atom feed
From: ka@socrates.hr.att.com (Kenneth Almquist)
Subject: Re: Multiple dispatch  (was Re: C++ not OOP?)
Date: 1995/04/19
Date: 1995-04-19T00:00:00+00:00	[thread overview]
Message-ID: <D79o2K.K0o@nntpa.cb.att.com> (raw)
In-Reply-To: 3mbmd5$s06@icebox.mfltd.co.uk

Robert Eachus interpreted the example problem slightly differently than
I did.  I assumed that (1) the system might have to support shapes and
devices which were very different than those anticipated when the system
was designed and (2) to achieve adequate drawing speeds it is necessary
to do a fairly good job of adapting to the capabilities of the various
devices.  Under these assumptions, Robert's design no longer guarantees
the O(1) subroutine counts he intended.

If a new shape is added, along with some devices which support an
operation specificly designed to support that shape, then to achieve
adequate efficiency (see assumption 2) it may be necessary to add a
new optional operation to Robert's design.

More seriously, suppose that there is a shape which approximates a
complex curve using a series of arc drawing operations.  Then a device
appears which can efficiently draw parabola segments but not arcs
Drawing the complex curve by generating a series of arcs which are in
turn translated into parabola segments will result in more parabola
segments than optimal.  If the result doesn't meet our performance
requirements, we have to modify the definition of the shape to query
the device and use either arcs or parabola segments as appropriate.
The design may avoid this particular problem, but assumption 1 implies
that something similar will eventually happen.

The design presented by Robert is still usable even with my assumptions.
The failure to achieve development effort proportional to the number
of features is inherent in the problem.[1]  However, it is sometimes
necessary to modify exiting shape routines rather than just add new
routines.  This is undesirable but certainly not fatal.

The problem I see with multiple dispatch is this:  Frequently it is
easy to express a high level description of a problem in terms of
multiple dispatch, but multiple dispatch normally requires you to
write too many routines.  The solution that I have been toying with is
application specific dispatch.  The idea is that you write the minimum
number of implementations of an abstract routine required to solve a
problem, and then develop an application-specific method of selecting
which implementation to call in a specific instance.  This minimizes
the number of instances at the cost of increasing the complexity of
determining which instance to call.

I think that a case can be made for the use of application-specific
multiple dispatch is the best approach for the shape-displaying
problem because it allows you to avoid modifying (as opposed to
adding) implementations of routines.  However, it is a weak case
because the application specific dispatching code may have to be
modified.
				Kenneth Almquist



[1] It might be possible to write a program which read descriptions
    of the shapes and devices, and generate code to display each
    shape on each device.  Once this program was written, the
    programmer cost to implement a feature would be O(1).  My guess
    is that this approach is not very practical.




  parent reply	other threads:[~1995-04-19  0:00 UTC|newest]

Thread overview: 68+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1995-04-02  0:00 Language Efficiency Robert C. Bethel
1995-04-04  0:00 ` Harold P Zbiegien
1995-04-04  0:00   ` Kennel
1995-04-05  0:00     ` Ray Toal
1995-04-07  0:00     ` Robert Dewar
     [not found]       ` <3m9o9q$igf@stc06.ctd.ornl.gov>
     [not found]         ` <D6ss6z.Gvw@mcshub.dcss.mcmaster.ca>
     [not found]           ` <dewar.797512974@gnat>
1995-04-19  0:00             ` Adam Beneschan
1995-04-19  0:00               ` Robert Dewar
     [not found]             ` <3mbmd5$s06@icebox.mfltd.co.uk>
1995-04-19  0:00               ` C++ not OOP? (Was: " Harley Davis
     [not found]               ` <D6uA77.Lqp@mcshub.dcss.mcmaster.ca>
     [not found]                 ` <dewar.797566928@gnat>
     [not found]                   ` <D6vxDG.JKJ@mcshub.dcss.mcmaster.ca>
     [not found]                     ` <dewar.797636710@gnat>
     [not found]                       ` <D6xF22.38H@mcshub.dcss.mcmaster.ca>
     [not found]                         ` <dewar.797729041@gnat>
     [not found]                           ` <3msdop$862@stc06.ctd.ornl.gov>
1995-04-19  0:00                   ` Paul Graham
1995-04-19  0:00                     ` Robert Dewar
     [not found]                 ` <3mcfbf$psl@acmez.gatech.edu>
     [not found]                   ` <3mgnkc$e3j@atlantis <3muaif$46u@atlantis.utmb.edu>
     [not found]                     ` <3n0lsu$nio@druid.borland.com>
     [not found]                       ` <3n0uvi$8jt@atlantis.utmb.edu>
1995-04-19  0:00                         ` C++ not OOP? (Was: " Fernando Mato Mira
1995-04-19  0:00                           ` Curtis Bass
1995-04-19  0:00                             ` David Weller
1995-04-20  0:00                               ` Curtis Bass
1995-04-20  0:00                                 ` David Weller
1995-04-20  0:00                                   ` Robert Dewar
1995-04-21  0:00                                     ` Curtis Bass
1995-04-21  0:00                                       ` Robert Dewar
1995-04-20  0:00                                   ` Curtis Bass
1995-04-21  0:00                                     ` Robert Martin
1995-04-21  0:00                                       ` Ed Osinski
1995-04-21  0:00                                     ` Fernando Mato Mira
1995-04-21  0:00                                 ` Robert Martin
1995-04-20  0:00                         ` Matt Austern
1995-04-21  0:00                         ` Matt Austern
1995-04-22  0:00                           ` Robert Martin
1995-04-22  0:00                             ` OOAD courses by Object Mentor cjames
1995-04-22  0:00                           ` C++ not OOP? (Was: Language Efficiency David Weller
1995-04-21  0:00                         ` Ed Osinski
1995-04-21  0:00                         ` Robert Martin
1995-04-21  0:00                           ` Curtis Bass
1995-04-21  0:00                         ` Robert Martin
1995-04-21  0:00                           ` Curtis Bass
     [not found]                   ` <3mcoh6$add@Starbase.NeoSoft.COM>
     [not found]                     ` <3mdrpf$3o9@disunms.epfl.ch>
     [not found]                       ` <dewar.797608300@gnat>
     [not found]                         ` <3mg45s$5r7@disunms.epfl.ch>
     [not found]                           ` <3mjc8c$630@crcnis3.unl.edu>
     [not found]                             ` <D71Gs9.2FG@nntpa.cb.att.com>
     [not found]                               ` <EACHUS.95Apr17162921@spectre.mitre.org>
     [not found]                                 ` <3n1als$ksi@no-names.nerdc.ufl.edu>
1995-04-19  0:00                                   ` Multiple dispatch (was Re: C++ not OOP?) Fernando Mato Mira
     [not found]                           ` <1995Apr13.152104@di.epfl.ch>
1995-04-21  0:00                             ` C++ not OOP? (Was: Language Efficiency James McKim
     [not found]                   ` <3mgnkc$e3j@atlantis.utmb.edu>
     [not found]                     ` <3mk65q$1kti@watnews1.watson.ibm.com>
     [not found]                       ` <3muavq$46u@atlantis.utmb.edu>
1995-04-21  0:00                         ` Norman H. Cohen
1995-04-21  0:00                           ` Curtis Bass
     [not found]                     ` <1995Apr13.180317.3308@rcmcon.com>
     [not found]                       ` <3muaif$46u@atlantis.utmb.edu>
1995-04-21  0:00                         ` Robert Martin
1995-04-21  0:00                           ` Curtis Bass
1995-04-21  0:00                             ` Robert Dewar
1995-04-22  0:00                             ` Robert Martin
1995-04-19  0:00               ` Kenneth Almquist [this message]
1995-04-19  0:00               ` Multiple dispatch (was Re: C++ not OOP?) Robert I. Eachus
     [not found]               ` <MATT.95Apr17124932@physics10.berkeley.edu>
     [not found]                 ` <3mujnl$4u8@atlantis.utmb.edu>
1995-04-20  0:00                   ` C++ not OOP? (Was: Language Efficiency ron house
1995-04-21  0:00                   ` Robert Martin
1995-04-21  0:00                     ` Curtis Bass
1995-04-21  0:00               ` Multiple dispatch (was Re: C++ not OOP?) Robert I. Eachus
1995-04-21  0:00               ` C++ not OOP? (Was: Language Efficiency Norman H. Cohen
1995-04-21  0:00                 ` Fernando Mato Mira
1995-04-21  0:00                   ` Erik Naggum
     [not found]         ` <dewar.797469506@gnat>
     [not found]           ` <1995Apr10.095958@di.epfl.ch>
     [not found]             ` <dewar.797513130@gnat>
     [not found]               ` <1995Apr10.165638@di.epfl.ch>
     [not found]                 ` <D6yGqv.4BG@nntpa.cb.att.com>
1995-04-21  0:00                   ` Fergus Henderson
1995-04-22  0:00                     ` Kenneth Almquist
1995-04-19  0:00       ` Fergus Henderson
1995-04-19  0:00         ` Robert Dewar
1995-04-20  0:00           ` Kennel
1995-04-19  0:00             ` Robert Dewar
1995-04-04  0:00   ` Larry Kilgallen
1995-04-06  0:00     ` Robert Dewar
1995-04-20  0:00   ` Matt Austern
1995-04-21  0:00   ` Robert I. Eachus
1995-04-04  0:00 ` Bob Kitzberger
1995-04-05  0:00   ` Mike Wilson
1995-04-05  0:00     ` Larry Kilgallen
1995-04-05  0:00     ` David Weller
1995-04-05  0:00 ` Mitch Gart
1995-04-05  0:00 ` Lawrence Free/ A.F. Software Services
1995-04-06  0:00 ` Ken Leidner
1995-04-06  0:00   ` Larry Kilgallen
replies disabled

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