Mailing list for all users of the OCaml language and system.
 help / color / mirror / Atom feed
From: skaller <skaller@users.sourceforge.net>
To: John Prevost <j.prevost@gmail.com>
Cc: caml-list <caml-list@inria.fr>
Subject: Re: [Caml-list] Narrowing class's public interface
Date: 13 Oct 2004 12:27:07 +1000	[thread overview]
Message-ID: <1097634426.19740.152.camel@pelican.wigram> (raw)
In-Reply-To: <d849ad2a0410121843495fe4c0@mail.gmail.com>

On Wed, 2004-10-13 at 11:43, John Prevost wrote:

> Even though we inherit float_random_variable in the type for class
> gaussian, gaussian is not, and never will be, a subtype of
> float_random_variable.  The trouble is that we have a binary method
> here. 

Indeed. More generally, objects require invariant
(or contravariant) method arguments, but almost all
'real world' problems .. and mathematics ones in particular ..
require covariant arguments, binary operators being
a special case of that.

Hence OO is useless as a general paradigm. It's a useful
technique in special cases .. in particular you get
dynamic dispatch. For example you can use OO abstraction
for device drivers because the read and write methods
only handle a *fixed* data type (characters).

Don't even both trying to make the character type polymorphic
because the theory says it can't be done. The reason is 
also easy to see, as John Provost described, but another
view of the same thing: you'd need one method for every
driver kind/character kind combination. In other words
the number of methods needed is quadratic in the subtypes,
but OO only supports linear -- you can supply a new method
for each derived 'main object' type .. which is why the method
arguments can't also be polymorphic.


-- 
John Skaller, mailto:skaller@users.sf.net
voice: 061-2-9660-0850, 
snail: PO BOX 401 Glebe NSW 2037 Australia
Checkout the Felix programming language http://felix.sf.net



-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


  reply	other threads:[~2004-10-13  2:27 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-10-12 22:16 Tony Edgin
2004-10-13  0:49 ` Jacques Garrigue
2004-10-13  1:43   ` John Prevost
2004-10-13  2:27     ` skaller [this message]
2004-10-13  6:39       ` John Prevost
2004-10-13  7:34         ` skaller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1097634426.19740.152.camel@pelican.wigram \
    --to=skaller@users.sourceforge.net \
    --cc=caml-list@inria.fr \
    --cc=j.prevost@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox