2011/5/2 [email protected] <[email protected]>

> Thx, can you be more specific? I'm looking for reasons.
>
> Door>>open, close (delegating to state)
> OpenedDoorState>>close
> ClosedDoorState>>open
>
> delegation, empty methods, throwing exceptions, that all seems just ugly,
> I don't want anybody looking in methods browser
> to think that every door can be closed or opened,
> because that's not right.
>
> maybe I don't want object to become another object, maybe I just want to
> change its class? (is it possible?)
>
>
Yes, you can. #check adoptInstance: or #primitiveChangeClassTo:
But again, I am not sure you need this for your example.

Did you consider traits?

Even so, I  don't think that implementing empty methods or throwing errors
is that bad. In fact, it looks good for me.


> I want empty Door class (or implementing only things possible with any
> door)
> and subclasses representing their states.
>
>
>
> Dne Mon, 02 May 2011 14:19:31 +0200 Stéphane Ducasse <
> [email protected]> napsal(a):
>
>
>  Do not use become: for state pattern. It is not worth.
>>
>> Stef
>>
>> On May 2, 2011, at 3:11 PM, [email protected] wrote:
>>
>>  I see that #become: is hard to follow in code (either for human or
>>> analysis tools)
>>>
>>> I'm trying to express state-pattern:
>>>
>>> OpenedDoor>>close
>>> ClosedDoor>>open
>>>
>>> And I would like to avoid this:
>>> Door>>close
>>>        state close.
>>> Door>>open
>>>        state open.
>>>
>>> Because if Door cannot be opened depending on its current state, IMHO no
>>> method should be
>>> there. Which is why become: seems as the best fit.
>>>
>>>
>>> I would also like to know why proxy is considered better, because
>>> #messageNotUnderstood
>>> seems pretty magic too. (except the fact that become: can crash VM)
>>>
>>>
>>> Dne Mon, 02 May 2011 14:39:40 +0200 Mariano Martinez Peck <
>>> [email protected]> napsal(a):
>>>
>>>  2011/5/2 [email protected] <[email protected]>
>>>>
>>>>
>>>>> I've heard that become: is considered to be magic
>>>>> and should be avoided and replaced by either AOP or proxies,
>>>>>
>>>>>
>>>>>  That's "normally" true. But it depends what are you doing. For a
>>>> normal app,
>>>> busieness, etc, it is not likely you will need a #become:.
>>>> However, if you are doing low level stuff, frameworks or hacky things
>>>> you
>>>> may need it.
>>>>
>>>> Can you tell us what are your needs and why you would like to use
>>>> #become:?
>>>> or you just want to know about it?
>>>>
>>>>
>>>>  I googled a little but I couldn't find anything more concrete.
>>>>>
>>>>> Does anybody have any link or opinion about that?
>>>>> I'd be glad to hear something more about it.
>>>>>
>>>>> Thx
>>>>>
>>>>> --
>>>>> Tato zpráva byla vytvořena převratným poštovním klientem Opery:
>>>>> http://www.opera.com/mail/
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>> --
>>> Tato zpráva byla vytvořena převratným poštovním klientem Opery:
>>> http://www.opera.com/mail/
>>>
>>>
>>
>>
>
> --
> Tato zpráva byla vytvořena převratným poštovním klientem Opery:
> http://www.opera.com/mail/
>
>


-- 
Mariano
http://marianopeck.wordpress.com

Reply via email to