0% found this document useful (0 votes)
13 views23 pages

State Transition

ase

Uploaded by

Ramsha Tariq
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
13 views23 pages

State Transition

ase

Uploaded by

Ramsha Tariq
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 23

UML State Machine Diagrams and Modeling

State Machine Diagram


• Illustrates the interesting events and states
of an object and the behavior of an object
in reaction to an event.
– Event: significant or noteworthy occurrence.
• E.g., telephone receiver taken off hook.
– State: the condition of an object at a moment
in time (between events).
– Transition: a relationship between two states;
when an event occurs, the object moves from
the current state to a related state.
UML State Machine Diagram
• States shown as rounded rectangles.
• Transitions shown as arrows.
• Events shown as labels on transition
arrows.
• Initial pseudo-state automatically
transitions to a particular state on object
instantiation.
• Events with no corresponding transitions
are ignored.
State Transition Diagram
• A state transition diagram is a technique to depict:

1. The states of an entity


2. The transitions of states of the entity
3. The trigger or the event that caused the transition of state of
the entity

• The entity may be a physical device such as a light


switch or a vending machine; it may be a software
system or component such as a word processor or
an operating system; it may be a biological system
such as a cell or a human; or - - - -

This modeling technique came from a more formal area called automata theory.
State transition diagram depicted a Finite State Machine.
Software Program View

• The end product of a software is a program


which executes. In depicting the program (or
an object) we can consider:

– Variables which take on different values


– Control structure and assignment statements
(events) in the program that change the values of
the variables; but “little” is said about how the
control structure or the statements work

1. Combination of values of the data (variables & constants) at any point of


the program represent the program state at that point.

2. The change made to the values of the variables through assignment statements
represent a transition of state
A very simple example
light switch (page 368 of your text)
From To
Alt State Event State
(light) (switch) (light)
switch light
[l_st=on] on turnOff off
TurnOff ( )

[l_st=off] off turnOn on


TurnOn ( )

2. “State transition table”


1. “Sequence diagram” (alternative for light with switch events
fragment) for switch and light interaction

turnOff

light light
on off

turnOn
3. “State transition diagram”
for light with switch events
A little “more” on the light switch

turnOff
turnOff turnOff

on off
on off

turnOn turnOn turnOn

What happens if we turn on


state can “transition” to its
a light that is already on?
current state
Fig. 29.1 State machine diagram for a telephone

Telephone

initial state

off hook
Idle Active state

on hook

transition event
Transition Actions and Guards
• A transition can cause an action to fire.
– In software implementation, a method of the
class of the state machine is invoked.
• A transition may have a conditional guard.
– The transition occurs only if the test passes.
Fig. 29.2 Transition action and guard notation

transition action

off hook / play dial tone


[valid subscriber]
Idle Active

on hook

guard condition
Nested States
• A state may be represented as nested
substates.
– In UML, substates are shown by nesting them
in a superstate box.
• A substate inherits the transitions of its
superstate.
– Allows succinct state machine diagrams.
Fig. 29.3 Nested states

off hook / play dial tone

Active
[valid subscriber]
Idle

PlayingDialTone Talking
on h
o ok

digit digit connected

complete
Dialing Connecting
State-Independent vs. State-Dependent
• State-independent (modeless) — type of
object that always responds the same way
to an event.
• State-dependent (modal) — type of object
that reacts differently to events depending
on its state or mode.
Use state machine diagrams for modeling
state-dependent objects with complex
behavior, or to model legal sequences of
operations.
Modeling State-dependent Objects
• Complex reactive objects
– Physical devices controlled by software
• E.g., phone, microwave oven, thermostat
– Transactions and related business objects
• Protocols and legal sequences
– Communication protocols (e.g., TCP)
– UI page/window flow or navigation
– UI flow controllers or sessions
– Use case system operations
Fig. 29.4 Web page navigation modeling
Fig. 29.5 Legal sequence of use case operations

Process Sale

WatingForSale makeNewSale EnteringItems

enterItem
endSale

authorized makeCashPayment WaitingForPayment

makeCreditPayment

AuthorizingPayment makeCheckPayment
GoF State Pattern
• Problem:
– An object’s behavior is dependent on its state,
and its methods contain case logic reflecting
conditional state-dependent actions.
• Solution:
– Create a state class for each state,
implementing a common interface.
– Delegate state-dependent operations from the
context object to its current state object.
– Ensure context object always points to a state
object reflecting its current state.
Example: Transactional States
• A transactional support system typically
keeps track of the state of each persistent
object.
– Modifying a persistent object does not cause
an immediate database update — an explicit
commit operation must be performed.
– A delete or save causes change of state, not
an immediate database delete or save.
– A commit operation updates the database if
an object was modified (“dirty”), but does
nothing if the object is “clean”.
Fig. 38.12 Statechart for PersistentObject

State chart: PersistentObject


[new (not from DB)] [ from DB]

save
commit / insert rollback / reload
New OldClean OldDirty
commit / update

delete
Legend:
New--newly created; not in DB delete
Old--retrieved from DB
Clean--unmodified OldDelete
rollback / reload
Dirty--modified

Deleted commit / delete


Fig. 38.13 Persistent Objects

• Assume all persistent object classes extend a


PersistentObject class that provides common
technical services for persistence.
Domain

ProductSpecification Persistence
... PersistentObject

oid : OID
timeStamp: DateTime

commit()
delete()
rollback()
save()
...
Case-logic Structure
• Using case logic, commit and rollback
methods perform different actions, but
have a similar logic structure.
public void commit()
{
switch ( state )
{
case OLD_DIRTY:
// . . .
break;
case OLD_CLEAN:
// . . .
break;
. . .
State Transition Model using State Pattern

• Implementing transactional states:


– Create static singleton objects for each state
that are specializations of PObjectState.
• The commit method is implemented differently in
each state object.
– PersistentObject is the context object.
• Keeps a reference to a state object representing
the current state.
• Methods in the state objects call setState() to
cause a transistion to the next state.
• No case logic is needed.
{ state.delete( this ) }

{ state.rollback( this ) }
{ state.commit( this ) }
{ state.save( this ) }
PersistentObject

oid : OID PObjectState


{
state : PObjectState
// default no-op
commit() // bodies for
commit(obj : PersistentObject) // each method
delete() 1
rollback() * delete(obj : PersistentObject) }
rollback(obj : PersistentObject)
save()
save(obj : PersistentObject)
setState(PObjectState)
...

OldDirty OldClean New OldDelete


State State State State
Product Sale
Specification
...
... commit(...) delete(...) commit(...) commit(...)
... delete(...) save(...) rollback(...)
... rollback(...)

{ // commit
PersistenceFacade.getInstance().update( obj )
obj.setState( OldCleanState.getInstance() ) }

{ // rollback
PersistenceFacade.getInstance().reload( obj )
obj.setState( OldCleanState.getInstance() ) } { // commit
PersistenceFacade.getInstance().insert( obj )
{ // delete obj.setState( OldCleanState.getInstance() ) }
obj.setState( OldDeleteState.getInstance() ) }
{ // commit
{ // save PersistenceFacade.getInstance().delete( obj )
obj.setState( OldDirtyState.getInstance() ) } obj.setState( DeletedState.getInstance() ) }

You might also like