[Tutor] designing POOP
keridee at jayco.net
Wed Feb 13 03:37:47 CET 2008
>> This is all fine and dandy, but the video game is pretty worthless unless
>> can show us what the score is. There are two ways to go about this. A)
>> the video game a display which it updates, or B) Tear open the case of
>> video game and look at the actual gears that increment the score to read
> Mmmm... that's not really so. If the object's creator meant the score to
> be read that way then it would not be 'Tear open the case' but just
> 'read the score'. The language with which we describe an action does
You just invalidated your own argument. Sure, the object's creator may have
designated that "the way to read the score is to take these screws out and
measure the angle of these gears in ratio to those gears" but what are you
really doing here? ...(you are thinking procedurally)... You are really
just overlooking the fact that the object is being *read*, meaning that the
*object itself returns a representation*. This tearing apart should be
abstracted with a method. The meer fact that you say 'tearing open the case'
as just another way to say 'read the score' suggests a method called
readscore(). You are exactly right. It does not matter with what language
you describe an action, because the interface should still remain the same
whether you are reading an attribute, or calculating high level summation
probabilities to find the score. You are still just vg.readscore()
Your particular issue is with the simplicity of the attribute, we don't need
a getter method. True. But that in agreement with the concept of OOP. If you
decide to pick and choose whether an object does it or whether the developer
does it, not only do you have inconsistency in your programming style, but
you are no longer OBJECT-Oriented.
PS This is one of the big issues that developers have with the win32api. It
is procedural in this section, OOP in this section, etc. and more time is
spent actually look up these subtle differences to prevent errors than is
used in actual coding. A perfect OOP library does not Need a reference book.
A good OOP library should only need to propose a pattern.
>> The second way is preferable for many reasons...
>> A) The game designer decides to change the display, you don't have to
>> any code that uses the class
>> B) Clearly, tearing open a videogame is pretty low-level from an object
>> perspective. This is what Alan is saying with OOP purism.
> Did we think about REUSABILITY? What if in some other application I want
> to USE the score, not just display it? What if I want to display it in a
> different form (multiplying it by 100)? Then you are back to our
> original options : either check the score directly, define a getter, or
> a .... 'stater'(?) which returns the state of the object (in this case
> it would be a tuple with only the score in it, a getter in disguise if
> you ask me). AFAIK the python way is to just check the score, if later
> the object's author changes something he has ways built in in the
> language to keep the interface unchanged (yes, I think the score would
> be part of the interface, otherwise it would be _score).
I completely disagree with your issue on REUSABILITY here. Are you familiar
with the concept of subclassing? Or if you wish to ignore the power of OOP,
you can just add another method, which is still more realistic and intuitive
than directly accessing an internal state variable. Perhaps your major issue
here is whether or not score should be public? Alright. Give me one instance
in daily usage of any video game where the score of a video game is changed
without the video game knowing it. (example - cosmic rays change a bit in
the storage of the score and the video game is not aware of it) This concept
would allow a violation of a pure OOP VideoGame class, and allow an
otherwise private internal state to be made public.
PS - for fun. I can think of a more common reason why the score of video
games would change without using the actual video game interface. I watched
a tv episode of masterminds where the criminal thought up the perfect plan
to trick a slot machine by directly accessing the physical chip that
determined a winning combination. If the developer of the slot machine had
wanted this to be the way that winning combinations are chosen, he should
have provided a method which allowed for this.
More information about the Tutor