Help With Better Design
apollonius2 at gmail.com
apollonius2 at gmail.com
Wed Jun 20 15:21:43 EDT 2007
> I've written code that looks a lot like that, and it's
> a perfectly acceptable pattern IMHO. I don't bother
> with the variables ON and OFF, though, as they add no
> clarity to simply using 'ON' and 'OFF' for the states.
>
> [...]
> The test portion of the code is actually longer than
> the class
> itself :-)
>
> That's usually a good thing! It means your code is
> concise, and your tests are exhaustive. (But that
> doesn't mean you can't also refactor your tests.)
I have a habit of falling into the ole' "re-invent the wheel" trap. As
long as I can be thurough without veering too far off course i'm in
good shape.
---------------------------------------------------------------------------------------------------
>
> Better to use newstyle classes:
> class LightBulb(object):
>
> > def __init__(self, initial_state):
> > self.state = initial_state
>
> > def TurnOn(self):
>
> Pep-08 (naming conventions):
> def turn_on(self):
>
> > if self.state == OFF:
> > self.state = ON
> > else:
> > print "The Bulb Is Already ON!"
>
> > def TurnOff(self):
> > if self.state == ON:
> > self.state = OFF
> > else:
> > print "The Bulb Is Aleady OFF!"
Thanks for mentioning that as I have never looked at PEP-08 before
(just looked it up) and I bookmarked it for future reference.
> What about:
>
> class LightBulb(object):
> def __init__(self, state):
> self.state = state
>
> def switch(self):
> self.state = not self.state
>
> (snip)
I never thought about it using a switch. Steven eluded to it (toggle)
in his re-write of the code. I plan on using that idea.
> > I would like to be able to get a good hold of the concept
>
> state machines ?
Well both state machines and classes (objects). That may be a bit of a
tall order to take on all at once but the concepts seem to be quite
related. I already have a great deal of material on Classes so good to
go there. The state machine idea came from a game tutorial I was
reading and it really sparked my interest.
> > with this example before I try to model a more complex problem. Would
> > someone be willing to give me some feedback on this class and whether
> > I am on the right track or how I might better go about it?
>
> There is a lot to say about OO and state machines. Someone once defined
> the use of OO in simulations as "building an big unpredictable state
> machine from small predictable state machines". As a matter of fact,
> objects are (most of the time) informal state machines (they have state,
> and they have behaviour depending on state). Now there are much more
> formal state machines (google for "FSM" or "finite state machine") -
> which can be implemented in a lot of ways - including the "State" design
> pattern.
>
> Before jumping to implementation, you should probably try to model the
> "more complex problem" with something like UML state diagram (one of the
> few usable things in UML).
>
Thanks. Found some good FSM articles, that should help.
More information about the Python-list
mailing list