<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE message PUBLIC
  "-//MLarc//DTD MLarc output files//EN"
  "../../mlarc.dtd"[
  <!ATTLIST message
    listname CDATA #REQUIRED
    title CDATA #REQUIRED
  >
]>

  <?xml-stylesheet href="../../mlarc.xsl" type="text/xsl"?>


<message 
  url="2002/07/331705def71aab66cd579f8d5b34e217"
  from="John Prevost &lt;j.prevost@c...&gt;"
  author="John Prevost"
  date="2002-07-22T04:13:24"
  subject="Re: OCaml&apos;s OO design Re: [Caml-list] Protected methods"
  prev="2002/07/c52712390dd950b3b1df7a8c40fd0ec8"
  next="2002/07/7a65a2a07ceccfa4e53d0f1c228dbd4f"
  prev-in-thread="2002/07/c52712390dd950b3b1df7a8c40fd0ec8"
  next-in-thread="2002/07/4d88ea7bc8989476801d171755a1653d"
  prev-thread="2002/07/647457434ab87dabf18062d5a922a07a"
  next-thread="2002/07/444e872df95c217576d95f578cc60764"
  root="../../"
  period="month"
  listname="caml-list"
  title="Archives of the Caml mailing list">

<thread subject="[Caml-list] Protected methods">
<msg 
  url="2002/07/16bf0e05b121ad70d4407203ffcc2060"
  from="Alessandro Baretta &lt;alex@b...&gt;"
  author="Alessandro Baretta"
  date="2002-07-18T10:35:08"
  subject="[Caml-list] Protected methods">
<msg 
  url="2002/07/88d493b339b48ff3f330f1bdca3584fd"
  from="Gerd Stolpmann &lt;info@g...&gt;"
  author="Gerd Stolpmann"
  date="2002-07-18T11:01:34"
  subject="Re: [Caml-list] Protected methods">
<msg 
  url="2002/07/0bc4a82400e651216916e4f977a464bb"
  from="Alessandro Baretta &lt;alex@b...&gt;"
  author="Alessandro Baretta"
  date="2002-07-18T11:37:17"
  subject="Re: [Caml-list] Protected methods">
<msg 
  url="2002/07/97468669ddc77bef0c774de5284d4edc"
  from="Jacques Garrigue &lt;garrigue@k...&gt;"
  author="Jacques Garrigue"
  date="2002-07-19T08:50:13"
  subject="Re: [Caml-list] Protected methods">
<msg 
  url="2002/07/95b53058ae34958c36f4248bad4a51d8"
  from="Alessandro Baretta &lt;alex@b...&gt;"
  author="Alessandro Baretta"
  date="2002-07-19T09:53:56"
  subject="Re: [Caml-list] Protected methods">
<msg 
  url="2002/07/81fc8ddbc96bf9fd110437441913de3f"
  from="Jacques Garrigue &lt;garrigue@k...&gt;"
  author="Jacques Garrigue"
  date="2002-07-20T00:46:55"
  subject="Re: [Caml-list] Protected methods">
<msg 
  url="2002/07/ad6a52f05ed89cbcbc5e8d1d6b548581"
  from="Alessandro Baretta &lt;alex@b...&gt;"
  author="Alessandro Baretta"
  date="2002-07-20T07:34:16"
  subject="Re: [Caml-list] Protected methods">
</msg>
</msg>
<msg 
  url="2002/07/3b8654b28f0205244174f3bebd7b9f1d"
  from="Jacques Garrigue &lt;garrigue@k...&gt;"
  author="Jacques Garrigue"
  date="2002-07-20T01:31:26"
  subject="Re: [Caml-list] Protected methods">
<msg 
  url="2002/07/a8d866581e1a8f5a36577e0e1cde4f43"
  from="Alessandro Baretta &lt;alex@b...&gt;"
  author="Alessandro Baretta"
  date="2002-07-20T07:41:03"
  subject="Re: [Caml-list] Protected methods">
</msg>
</msg>
</msg>
</msg>
</msg>
</msg>
<msg 
  url="2002/07/82e9eedb518a1b06dbd968154ac21e67"
  from="Dmitry Bely &lt;dbely@m...&gt;"
  author="Dmitry Bely"
  date="2002-07-20T22:55:22"
  subject="Re: [Caml-list] Protected methods">
<msg 
  url="2002/07/43384b3c4e0ffaa4c68217d2e6be8043"
  from="Brian Smith &lt;brian-l-smith@u...&gt;"
  author="Brian Smith"
  date="2002-07-20T23:08:12"
  subject="Re: [Caml-list] Protected methods">
<msg 
  url="2002/07/c52712390dd950b3b1df7a8c40fd0ec8"
  from="Jacques Garrigue &lt;garrigue@k...&gt;"
  author="Jacques Garrigue"
  date="2002-07-22T03:37:42"
  subject="OCaml&apos;s OO design Re: [Caml-list] Protected methods">
<msg 
  url="2002/07/331705def71aab66cd579f8d5b34e217"
  from="John Prevost &lt;j.prevost@c...&gt;"
  author="John Prevost"
  date="2002-07-22T04:13:24"
  subject="Re: OCaml&apos;s OO design Re: [Caml-list] Protected methods">
</msg>
</msg>
</msg>
<msg 
  url="2002/07/4d88ea7bc8989476801d171755a1653d"
  from="Alessandro Baretta &lt;alex@b...&gt;"
  author="Alessandro Baretta"
  date="2002-07-20T23:53:19"
  subject="Re: [Caml-list] Protected methods">
<msg 
  url="2002/07/ceef67ffac4fa576044134564c761207"
  from="Dmitry Bely &lt;dbely@m...&gt;"
  author="Dmitry Bely"
  date="2002-07-21T07:55:23"
  subject="Re: [Caml-list] Protected methods">
<msg 
  url="2002/07/b6696076b1bd316d89f212c2d6849e48"
  from="Alessandro Baretta &lt;alex@b...&gt;"
  author="Alessandro Baretta"
  date="2002-07-21T13:07:07"
  subject="Re: [Caml-list] Protected methods">
</msg>
</msg>
</msg>
</msg>
</msg>
</thread>

<contents>
Just as a note, I think the major barrier to the "friend" behavior of
"protected" and "private" in Java (that is, methods of the appropriate
classes are able to call a given method even though other pieces of
code cannot see that it exists) is that subtyping and subclassing are
independent.

In Java, if you are handed a value of a given type and know that type
is a subclass of the "Foo" class, you *know* that it has all the
methods (hidden and not hidden) that a Foo has.  In O'Caml, this
luxury is not available.  If the object type of foo does not indicate
that a method "bar" exists, it may very well not exist.

This is why you need to do a song and dance with abstract types to
achieve the same effect.  The method *must* be visible or other
objects can't call it, since it is *only* the type of an object that
defines its interface.  Using type abstraction means that only code
that knows the underlying type has access, which allows you to show
that the method is there and has the right type, while not allowing
access to everybody.

Does this feel clunky?  Yes, a little bit.  But it's a price I'm
willing to pay for structural subtyping and self types.  I think it
calls to mind some of the subtler problems with subclassing and
subtyping--like invariants.  If you call a "protected" method in Java,
it generally means you're depending on the subclass to maintain
invariants from the superclass.  But all too often, this can lead to
problems where modularity breaks down.

Bondage programming?  Yeah, could be.  :) But it has some interesting
typing properties rarely found elsewhere, and makes us think about a
different set of implications in object calculi than most languages.
Consider learning to work within these constraints to be working in a
different programming paradigm than Java or C++ provides--because it
clearly is.  Different idioms are needed.  Some possibilities that
were closed off become open, and some that were open are now more
constrained.

It's, quite honestly, a load of fun.

John.
-------------------
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

</contents>

</message>

