From: "Tiphaine.Turpin" <Tiphaine.Turpin@free.fr>
To: Dirk Thierbach <dthierbach@gmx.de>
Cc: caml-list@yquem.inria.fr
Subject: Re: [Caml-list] OO programming
Date: Mon, 25 Feb 2008 22:49:49 +0100 [thread overview]
Message-ID: <47C337FD.9030001@free.fr> (raw)
In-Reply-To: <20080225201035.GA5414@feanor>
Dirk Thierbach a écrit :
> I am not interested in doing something
> just because eomeone tells me, possible mistakenly, that I have to
> follow "the" paradigm.
>
I won't blame you for that. I'm not either :-). The few (2-3) programs
of "not-toy" size that I did using objects (either in Java or in Ocaml)
both extensively used many linked objects implementing lots of methods
in a mutually recursive way, so I consider this an crucial features of
objects. And really, I code things the way I think I'm able to do them
the best (I have the chance that my programs only need to look nice to
me): I do what I can. I choose functional or imperative style according
to my best understanding of the domain, or objects (in Ocaml, I consider
objects only if I think that I cannot achieve my goals in a satisfactory
way with functions).
>
>>> Much more annoying is that one also has to give types to arguments in
>>> methods that are unused (they are present make them compatible with
>>> another class, which uses them;
>>>
>
>
>> which is where I think mutually recursive classes would be usefull, if
>> their typing was easier.
>>
>
> Mutual recursive classes won't solve this problem at all.
Yes it does, I think (wether it's a good way of solving it is
debatable). If you declare the classes generating events together with
classes that handle them, and if it appears (in the declaration, which
is where fields are usefull) that the method used in the generating
objects will be invoked on the handler objects, then the types of the
two methods will need to be compatible. Of course, in your example, you
would probably want to use either a class type for handler objects, or
have them inherit from a virtual handler class that declare the type of
the method once and for all. My point is that using in one of the
classes the type associated with the other class for one of its fields
(and invoking methods on that fields) puts the necessary constraints to
free you from many declarations (mutual recursive classes are actually
only needed if you want links in both directions, which is not
necessarily the case of your example, I agree).
> Maybe an
> example helps: In a GUI, one can get various sorts of events, say,
> a "resize" event. If the method connected to that event is only
> interested in the new width and not in the height, so it doesn't
> use this value at all, you have to declare the type. No other class
> involved at all.
>
>> I will try to state at an abstract level what I would like to do :
>>
>> - define parametric virtual classes A and B so that every A has a Bs
>> (one or many...) and vice-versa.
>> - possibly extend A and B to A' and B' respectively, so that every A'
>> has B's (and not just Bs), etc.
>> - subtyping: possibly extend B to B1 and B2 so that their objects have
>> As, but those As still have Bs, so that I can associate the same A to
>> objects of class B, B1 or B2.
>>
>> - and the ultimate goal combining all that: define A and B as above,
>> other virtual classes C and D in a similar way and E and F too, and
>> define concrete classes X Y Z1 Z2 just by saying that X extends A, Y
>> will play the role of B in the first two classes and the role of C in
>> the last two ones, and Z1 Z2 extends D (both) and E and F
>> (respectively). It happens that some of the types that were left
>> parametric (respectively methods defined as virtual) in B are made
>> concrete in C, (and so on), so I obtain my final concrete classes.
>>
>
> If you manage to find a simple type system for that, preferably with
> type inference and principal typings, I'd like to see it :-)
>
I wish I could do that in Ocaml...
>> For now, I found many introductions on ocaml objects using and how to
>> actually use them (Ocaml manual, Didier Remy's course, the "Developing
>> applications with Objective Caml" book, as suggested by Julien Moutinho,
>> and also Philippe Narbel's book) but none of them went that far.
>>
>
> So maybe there's a reason they are doing it differently. :-)
They aren't doing differently. They're just not treating an exhaustive
list of the software architecture problems that people may encouter (or,
pose to themselve). Which does not scandalize me in itself ;-).
Tiphaine Turpin
next prev parent reply other threads:[~2008-02-25 21:53 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-02-21 9:31 Tiphaine Turpin
2008-02-21 9:42 ` [Caml-list] " Erik de Castro Lopo
2008-02-21 13:38 ` Remi Vanicat
2008-02-24 16:33 ` [Caml-list] " Dirk Thierbach
2008-02-25 9:23 ` Tiphaine.Turpin
2008-02-25 15:48 ` Edgar Friendly
2008-02-25 16:02 ` Berke Durak
2008-02-25 20:12 ` Dirk Thierbach
2008-02-25 20:51 ` Tiphaine.Turpin
2008-02-25 23:03 ` Dirk Thierbach
2008-02-25 20:10 ` Dirk Thierbach
2008-02-25 21:49 ` Tiphaine.Turpin [this message]
2008-02-25 23:07 ` Dirk Thierbach
2008-02-29 14:22 ` Tiphaine.Turpin
2008-02-26 6:17 ` Jacques Garrigue
2008-02-26 9:36 ` Julien Signoles
2008-02-27 0:25 ` Tiphaine.Turpin
2008-02-27 1:37 ` Jacques Garrigue
2008-02-28 8:34 ` Keiko Nakata
2008-02-28 13:30 ` Andrej Bauer
2008-02-28 15:18 ` Keiko Nakata
2008-02-28 16:02 ` Edgar Friendly
2008-02-29 14:35 ` Tiphaine.Turpin
2008-02-29 15:58 ` Keiko Nakata
2008-03-03 9:40 ` Tiphaine.Turpin
2008-03-03 10:20 ` Jacques Garrigue
2008-03-03 10:30 ` Tiphaine.Turpin
2008-03-03 15:18 ` Keiko Nakata
2008-03-03 19:25 ` Tiphaine Turpin
2008-03-04 14:00 ` Keiko Nakata
2008-02-27 7:40 ` Dirk Thierbach
2008-02-27 14:04 ` Tiphaine.Turpin
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=47C337FD.9030001@free.fr \
--to=tiphaine.turpin@free.fr \
--cc=caml-list@yquem.inria.fr \
--cc=dthierbach@gmx.de \
/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