Have a look at my JOOP'99 article because I explain how to develop instance specific behavior.

Stef


Le 24/7/16 à 17:14, Eric Velten de Melo a écrit :
Actually I wanted to have many different object instances with different behaviours picked at random from a list of available behaviours, but didn't find practical to create a class for each different method implementation and delegating to it, since there are many, possibly unlimited valid behaviours.

So maybe changing method implementation at runtime is not what I want because the method implementation will be shared among all instances. What I had in mind was a functionality similar to prototyped languages like Self and Javascript in which you could change the behaviour inside the object and not the class/prototype.

2016-07-23 7:35 GMT-03:00 Norbert Hartl <norb...@hartl.name <mailto:norb...@hartl.name>>:

    Can you elaborate on the reason why want to modify behaviour? And
    how you would like it to happen?
    If the code you want to modify is your own code than you can solve
    that most of time with the things you already have. Your example
    using a block might be altered to be a strategy pattern. That
    means you keep one ore more instance variables for strategy
    objects. Then you delegate parts of your behaviour to those
    objects. You can based on context exchange those objects to adjust
    behaviour.
    If it is not feasible to change the internal state of an object
    but you know all possible variants you can implement all
    variations as methods in the object. The right method can be
    invoked by doing a double dispatch with another object providing
    contextual information.
    There are plenty of possibilities so you need to know what is the
    context that is responsible for switching behaviour and the
    requirements of the behaviour modifications. Can you alter the
    object? Is the number of modifications a fixed number? Does the
    modification need to be thread safe?

    Norbert

    > Am 23.07.2016 um 00:41 schrieb Eric Velten de Melo
    <ericvm...@gmail.com <mailto:ericvm...@gmail.com>>:
    >
    > Hello,
    >
    > One thing I try to do often is changing the behaviour of a
    method dynamically at runtime. The current way I do this is by
    having a block as an instance variable and having the method call
    this block, but I find this approach a bit cumbersome. Is there
    some other way or is this the recommended approach?
    >
    > I mean, I suppose methods could be changed dynamically by means
    of reflection somehow, but is this an easy or recommended way of
    programming in Smalltalk? Should slots make things easier?
    >
    > Eric




Reply via email to