|   | 
Occasionally, you can describe the behavior of objects in state machine terms. For example, imagine an object that models the behavior of an extremely simple stamp dispenser described by these requirements:
Write control software for an automated stamp dispenser. The stamp dispenser accepts only nickels (5 cents) and dimes (10 cents) and dispenses only 20-cent stamps. The stamp dispenser's LED display indicates to the user the total amount of money inserted so far. As soon as 20 or more cents is inserted, a 20-cent stamp automatically dispenses along with any change. The only amounts the display shows, therefore, are 0, 5, 10, and 15 cents. If a dime and a nickel have been inserted, the display indicates 15 cents. If the user then inserts another dime, the stamp dispenser dispenses a 20-cent stamp, returns a nickel, and changes the display to show 0 cents. In addition to a coin slot, an opening for dispensing stamps and change, and an LED display, the stamp dispenser also has a coin return lever. When the user presses coin return, the stamp dispenser returns the amount of money indicated on the display, and changes the display to show 0 cents.
You could also describe the behavior of this simple stamp dispenser in terms of a state machine that has:
HAS_0, HAS_5, 
HAS_10, HAS_15
add5, add10, returnCoins
dispenseStamp, ret5, 
ret10, ret15
A stamp dispenser's current state indicates
how much money has been inserted. If no money has been inserted,
the stamp dispenser is in HAS_0 state. If a nickel
has been inserted, the stamp dispenser is in HAS_5 state,
and so on. No HAS_20 state appears in the list, because
as soon as 20 cents is inserted, a stamp is automatically issued
and any change is returned.
The three messages represent the actions a
stamp dispenser user can take: inserting a nickel (add5),
inserting a dime (add10), or pressing the coin return lever
(returnCoins). The four actions the stamp dispenser
can take are return a nickel (ret5), return a dime
(ret10), return 15 cents (ret15), or dispense
a 20 cent stamp (dispenseStamp).
 
Figure 3-1. The stamp dispenser state-transition diagram
In HAS_0, HAS_5, HAS_10,
and HAS_15, is represented by a circle. The circle
labeled start with an arrow pointing to the HAS_0 state
indicates the state machine's initial state is HAS_0.
State transitions are shown by arrows between states. Each arrow
is labeled with the message that causes the transition and, if any
actions are required to accompany the state transistion, a forward
slash plus the required actions. For example, an arrow from HAS_10 to 
HAS_0 is labeled add10/dispenseStamp.
This arrow indicates that if an add10 message is received
while the state machine is in the HAS_10 state, the machine
should change to the HAS_0 state and perform the dispenseStamp action.
| 
 | 
| 
Last Updated: Sunday, May 11, 2003 Copyright © 1996-2003 Artima Software, Inc. All Rights Reserved. | 
URL: http://www.artima.com/objectdesign/object6.html Artima.com is created by Bill Venners |