[Rd] WG: Reference classes: opinion on OOP design
Janko Thyson
janko.thyson at ku-eichstaett.de
Wed Nov 17 20:00:36 CET 2010
Sorry, never sent an attachment before. I think my .R file didn't pass, so
I'm attaching a .txt instead.
-----Ursprüngliche Nachricht-----
Von: Janko Thyson [mailto:janko.thyson at ku-eichstaett.de]
Gesendet: Mittwoch, 17. November 2010 19:56
An: 'r-devel at r-project. org'
Betreff: Reference classes: opinion on OOP design
Dear list,
Im aware that this post does not really comply with the posting guide with
respect to providing a minimal reproducible code example. But I do hope
its okay that I spared uninterested readers by putting that into the
attachment ;-)
The thing is that Im not really familiar with true OOP as R is my first
programming language. So I wanted to ask kindly for some expert opinion on a
certain paradigm Ive come up with concerning my use of class defs and
methods (S4 Reference Classes and S4 methods).
MY GOAL:
I thought itd be neat to have Reference Class instances that can
- load data from remote places (e.g. a db, file whatever) on demand
- enable field access in a static OR dynamic way:
o static -> regular static field access (or if not initialized yet:
retrieve data (optionally buffer it) -> write it to static field)
o dynamic -> retrieve data (as it might have changed in the remote
location in the meantime) and optionally buffer it for later use
- enable sync of dynamic/buffer values with static field values (e.g.
whenever the difference between static and dynamic value passes threshold x
->
sync static and dynamic values.
- Provide a value history (which might be useful for something ;-))
- Enable explicitly setting field values and facilitate their writeback to
the remote location
The instances should be flexible enough to work in an "static only" and
"dynamic only" context and should make as much use of existing functionality
(e.g. S4 classes, S4 method dispatch etc.) as possible. I do want to have
the choice if Im carrying (possibly loads of) data with me in the fields of
my object or if I compute/get them based on some function whenever I
actually need it. For example, I'm thinking about parameter estimates that
could automatically be reestimated based on rules that take into account a
constantly changing data structure (new observations come it quite
frequently or something like that).
What do you think of the way Ive implemented this? Does this make sense to
you or is something like this done in another (and probably more elegant
;-)) way?
THE HOMEWORK I DID
- Ive looked at active bindings which are nice. But this limits me to funs
with either none or one argument if Im not mistaken.
- I do like the idea of getRefClass(Blabla)$accessors(
) setting up
get/set methods for me, but would need to customize them to my specific
needs
(e.g. handling the default values of method arguments etc.)
Ive attached a code example and would really appreciate your comments if
you find some time.
Thanks a lot!!
Janko
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: r-devel_example.txt
URL: <https://stat.ethz.ch/pipermail/r-devel/attachments/20101117/ac8d2a98/attachment.txt>
More information about the R-devel
mailing list