Presentation is loading. Please wait.

Presentation is loading. Please wait.

Statecharts and Object Orientation Everything you always wanted to know –But were afraid to ask.

Similar presentations


Presentation on theme: "Statecharts and Object Orientation Everything you always wanted to know –But were afraid to ask."— Presentation transcript:

1 Statecharts and Object Orientation Everything you always wanted to know –But were afraid to ask

2

3

4 Transitions Default Transition –No events or conditions –Can have actions Regular transition –Event[condition]/action –tm() is an event Null transition –[condition]

5 Default Transition

6 Regular Transition

7 What happens when evGo is taken? Condition is evaluated –Is ready true? If condition is true, actions on exit from state active are executed –In this case there aren’t any object exits state “active” actions on transition are executed – /doit() object enters state “idle” Object executes action on entry to state “idle” –In this case there aren’t any

8 timeout object enters state “rinsing” timer is set: set tm(1000) tm(1000) occurs 1000 ms later

9 Null Transition isRinsed() is a guard on null transition isRinsed() is evaluated every time object takes event

10 Timeout with Null Transition isRinsed() is a guard on null transition Boolean isRinsed() {return(0==rinseTime);} isRinsed() is evaluated every time tm(1000) occurs If “rinsing” is entered for the first time at 0000, at what time(s) is isRinsed() invoked?

11 Timeout with guarding Condition If “rinsing” is entered for the first time at 0000, at what time(s) is isRinsed() invoked?

12 What happens in a state?

13 Or-states (1)

14 Or-states (2)-transition from superStates Object is in state “pulsing” Object takes event “evJetOff” What happens?

15 Or-states (3)-transition to superStates Object is in state “idle” Object takes event “evX” What happens?

16 Or-states (4)-transition to history Object is in state “rinsing” Object takes event “evOpen” What happens? Object takes event “evClose” What happens?

17 and-states(1) event generated in one state, used in another What is the default state of the object? If startBehavior finished at 0000, what happens between 0000 and 7000?

18 and-states(2) what is default state?

19 Events sent between objects Dishwasher Tank Dishwasher takes event evStart. What happens?

20 Tracer Commands output –output mytrace.txt timestamp –OMTracer (0:00:00.000) go –Run go idle – takes next event in queue – if no event in queue, but there is a scheduled timeout, advances clock and takes timeout event

21 Tracer Messages (1) Invoked –Dishwasher[0] Invoked isInNeedOfService() Returned –Dishwasher[0]->isInNeedOfService() Returned set tm() –Dishwasher[0] set tm(10000) at ROOT.active.running.doorClosed.rinsing Sent Event –Dishwasher[0] Sent to AcmeTank[0] Event evTankFill() Received Event –AcmeTank[0] Received from Dishwasher[0] Event evTankFill() Note: object can send event to itself –AcmeTank[0] Sent to itself Event tm(4000) at ROOT.filling – AcmeTank[0] Received from itself Event tm(4000) at ROOT.filling Object entered state –Dishwasher[0] Entered State ROOT.active Object exited state –Dishwasher[0] Exited State ROOT.active.mode.normalMode

22 Tracer Messages (2) object cancelled timeout –AcmeJet[0] cancelled tm(1000) at ROOT.running.pulsing.left –When does this occur? Object modified Attribute values –Dishwasher[0] Modified Attribute Values dryTime3000 washTime8000 cycles1 rinseTime10000

23 Start Behavior (1) Object enters root state –Display[0] enters ROOT Object enters each sub-state –Display[0] enters ROOT.active For each state entered, object executes entry actions (if there are any) Object executes actions on default transition (if there are any)

24 Start Behavior (2) If the initial state has an exit transition triggered by timeout: –Object does set tm() when state entered If there is a state with a null transition: –Object sends OMStartBehaviorEvent –After StartBehavior finishes, object receives OMStartBehaviorEvent, and evaluates the condition on the null transition.

25 StartBehavior-countdown OMTracer (0:00:00.000) main() Invoked Display[0]->Start Behavior OMTracer (0:00:00.000) Display[0] Entered State ROOT OMTracer (0:00:00.000) Display[0] Invoked print(string = started) OMTracer (0:00:00.000) Display[0]->print(string = started) Returned OMTracer (0:00:00.000) Display[0] Entered State ROOT.active OMTracer (0:00:00.000) Display[0] set tm(200) at ROOT.active OMTracer (0:00:00.000) Display[0]->Start Behavior Returned

26 StartBehavior-dishwasher OMTracer (0:00:00.000) main() Invoked Dishwasher[0]->Start Behavior OMTracer (0:00:00.000) Dishwasher[0] Entered State ROOT OMTracer (0:00:00.000) Dishwasher[0] Entered State ROOT.active OMTracer (0:00:00.000) Dishwasher[0] Entered State ROOT.active.running OMTracer (0:00:00.000) Dishwasher[0] Entered State ROOT.active.running.doorClosed OMTracer (0:00:00.000) Dishwasher[0] Entered State ROOT.active.running.doorClosed.off OMTracer (0:00:00.100) Dishwasher[0] Entered State ROOT.active.mode OMTracer (0:00:00.100) Dishwasher[0] Entered State ROOT.active.mode.normalMode OMTracer (0:00:00.100) Dishwasher[0] Entered State ROOT.active.maintenance OMTracer (0:00:00.100) Dishwasher[0] Entered State ROOT.active.maintenance.maintenanceOk OMTracer (0:00:00.100) Dishwasher[0] Sent to itself Event OMStartBehaviorEvent OMTracer (0:00:00.100) Dishwasher[0]->Start Behavior Returned OMTracer (0:00:00.100) Dishwasher[0] Modified Attribute Values modeRinseTime10000 modeWashTime20000 modeDryTime5000

27 After Start Behavior returns-dishwasher takes OMStartBehavior Event (0:00:00.100) Dishwasher[0] Received from itself Event OMStartBehaviorEvent (0:00:00.100) main() Invoked Dishwasher[0]->Take Event OMStartBehaviorEvent() (0:00:00.100) Dishwasher[0] Invoked isInNeedOfService() (0:00:00.100) Dishwasher[0]->isInNeedOfService() Returned (0:00:00.100) Dishwasher[0]->Take Event OMStartBehaviorEvent() Returned

28 Take event-countdown

29 Take event-countdown(1) first cycle Please enter OMTracer Command>> go idle OMTracer (0:00:00.200) Display[0] Sent to itself Event tm(200) at ROOT.active OMTracer (0:00:00.200) Display[0] Received from itself Event tm(200) at ROOT.active OMTracer (0:00:00.200) main() Invoked Display[0]->Take Event Timeout OMTracer (0:00:00.200) Display[0] Invoked isDone() OMTracer (0:00:00.200) Display[0]->isDone() Returned OMTracer (0:00:00.200) Display[0] Exited State ROOT.active OMTracer (0:00:00.200) Display[0] Invoked print(n = 1) OMTracer (0:00:00.200) Display[0]->print(n = 1) Returned OMTracer (0:00:00.200) Display[0] Entered State ROOT.active OMTracer (0:00:00.200) Display[0] set tm(200) at ROOT.active OMTracer (0:00:00.200) Display[0]->Take Event Timeout Returned Executable is Idle

30 Take event-countdown(2) termination Please enter OMTracer Command>> go idle OMTracer (0:00:00.400) Display[0] Sent to itself Event tm(200) at ROOT.active OMTracer (0:00:00.400) Display[0] Received from itself Event tm(200) at ROOT.active OMTracer (0:00:00.400) main() Invoked Display[0]->Take Event Timeout OMTracer (0:00:00.400) Display[0] Invoked isDone() OMTracer (0:00:00.400) Display[0]->isDone() Returned OMTracer (0:00:00.400) Display[0] Exited State ROOT.active OMTracer (0:00:00.400) Display[0] Invoked print(n = 0) OMTracer (0:00:00.400) Display[0]->print(n = 0) Returned OMTracer (0:00:00.400) Display[0] Invoked print(string = Done) OMTracer (0:00:00.400) Display[0]->print(string = Done) Returned OMTracer (0:00:00.400) Display[0] Reached Termination State OMTracer (0:00:00.400) Display[0]->Take Event Timeout Returned OMTracer (0:00:00.400) main() Invoked Display[0]->~Display() OMTracer (0:00:00.400) Display[0]->~Display() Returned OMTracer (0:00:00.400) Instance Display[0] of class Display deleted by main() Executable is Idle

31 Take event-dishwasher Dishwasher takes evStart

32 Take event-dishwasher(1) Dishwasher takes evStart Please enter OMTracer Command>> go idle OMTracer (0:00:00.100) Sent to Dishwasher[0] Event evStart() OMTracer (0:00:00.100) Dishwasher[0] Received from Event evStart() Executable is Idle OMTracer (0:00:00.100) main() Invoked Dishwasher[0]->Take Event evStart() OMTracer (0:00:00.100) Dishwasher[0] Exited State ROOT.active.running.doorClosed.off Please enter OMTracer Command>> go idle OMTracer (0:00:00.100) Dishwasher[0] Invoked setup() OMTracer (0:00:00.100) Dishwasher[0]->setup() Returned OMTracer (0:00:00.100) Dishwasher[0] Modified Attribute Values dryTime3000 washTime 8000 cycles 1 rinseTime10000 OMTracer (0:00:00.100) Dishwasher[0] Entered State ROOT.active.running.doorClosed.filling OMTracer (0:00:00.100) Dishwasher[0] Sent to AcmeTank[0] Event evTankFill() OMTracer (0:00:00.100) Dishwasher[0] Invoked isInNeedOfService() OMTracer (0:00:00.100) Dishwasher[0]->isInNeedOfService() Returned OMTracer (0:00:00.100) Dishwasher[0]->Take Event evStart() Returned

33 Take event-dishwasher(2) Dishwasher takes evStart OMTracer (0:00:00.100) AcmeTank[0] Received from Dishwasher[0] Event evTankFill() OMTracer (0:00:00.200) main() Invoked AcmeTank[0]->Take Event evTankFill() OMTracer (0:00:00.200) AcmeTank[0] Exited State ROOT.empty OMTracer (0:00:00.200) AcmeTank[0] Entered State ROOT.filling OMTracer (0:00:00.200) AcmeTank[0] set tm(4000) at ROOT.filling OMTracer (0:00:00.200) AcmeTank[0]->Take Event evTankFill() Returned Executable is Idle Please enter OMTracer Command>> go idle OMTracer (0:00:04.200) AcmeTank[0] Sent to itself Event tm(4000) at ROOT.filling OMTracer (0:00:04.200) AcmeTank[0] Received from itself Event tm(4000) at ROOT.filling OMTracer (0:00:04.200) main() Invoked AcmeTank[0]->Take Event Timeout OMTracer (0:00:04.200) AcmeTank[0] Exited State ROOT.filling OMTracer (0:00:04.200) AcmeTank[0] Sent to Dishwasher[0] Event evFull() OMTracer (0:00:04.300) Dishwasher[0] Received from AcmeTank[0] Event evFull() OMTracer (0:00:04.300) main() Invoked Dishwasher[0]->Take Event evFull() OMTracer (0:00:04.300) Dishwasher[0] Exited State ROOT.active.running.doorClosed.filling OMTracer (0:00:04.300) Dishwasher[0] Entered State ROOT.active.running.doorClosed.rinsing

34 Sequence Diagrams System Line (for main) Instance lines (for each object) Time goes from top to bottom Events- slanted line between objects Operations- horizontal line between objects object can send to itself –Events, operations, timeouts

35 countdown

36 Sequence Diagram-countdown

37 Dishwasher

38 Sequence Diagram-dishwasher(1)

39 Sequence Diagram-dishwasher(2)


Download ppt "Statecharts and Object Orientation Everything you always wanted to know –But were afraid to ask."

Similar presentations


Ads by Google