! " # ! $ ! % & '' $ ( $ # ' # ) * ' !% # '' # ' % * '' # # ' # ''' ' ' +,-./% ''' $ ' 01 ! % 2 ( ' ( % 3 ' ''# ! 4 ''# # ! $# '' % & '' $ # 5' # '% & ! ' %% ' ' 4 # "% # ' % & ( '' 0 %#% +,,67,,6866/1% getsMarried Person single birthday getsMarried getsDivorced married <<observe>> getsDivorced birthday birthday single Traditional Person getsEngaged notengaged engaged getsEngaged birthday birthday <<observe>> getsDivorced married getsMarried birthday 2 # $ '' ''# 9: +,-./% 9# :3 09:1 +;7/ ' ' '" ## '' +26</% & 5 ' % 9: +;7/% # $ ' $ '" # $ ' 9:% 2 5' $ ' " ' # ' % ''# 9: '# ''# # 5 ! #% # 2#= ' % ' ! ># % $ $ #% 0& ! ' 1% ''# 9: 2# ? 8 # 5 # $ #' '% 9 5' 0=1 2# ? $ ' 0* 1 % & ' ' $# 5 ## !% * # $ # StateVertex subvertex source target Transition trigger Event StateMachine top PseudoState kind: PseudoStateKind CompositeState isConcurrent: Bool State SimpleState FinalState '# 5' # ## 9:% & ' ! " $ ' '' % * '# ! 5 $% '' 5' 5' +,-./% :StateMachine name = SM top :State name = top top (1) Eqns ::= Eqns, Protocol(SM) = State(top) (2) :CompositeState comp Eqns ::= Eqns , State(comp)= State(default) name = comp isConcurrent = false default :PseudoState kind = initial source s :State name = default target :Transition :SimpleState name = s Eqns ::= Eqns, State(s) = extBeh(s) (3) ''# ' % : $ ' ' ''#@ & $# $ $ '" ' ) #' " (4) :StateMachine top extBeh(top) ::= STOP top :State name = top (5) :CompositeState comp extBeh(s) ::= directBeh(s) [] extBeh(comp) name = comp s subvertex :StateVertex name = s s (6) :State name = s e1 . . . source trigger en :Transition :Event name = {e1, ..., en} (7) :State name = s succ(s,e) ::= e −> State(s1) source s e s1 :Transition directBeh(s) ::= succ(s,e1) [] ... [] succ(s,en) trigger :Event name = e target :State name = s1 ' 'A' #' #% B '' # ' % ''# ' ' " #' % C $ $# $ ''# #' % # # #' ' " ! # % 2 $ ' $ ! % & ' $ 5 '" $ $ 5 ! # 5'% , $ 3'' $ " '# 5' 5 # % D' ' # #' ' '% 5 5 #' # 5 5 ##% #' #' ## # # 5 " ## 0+67/1% & ' # # ## $ #' % ''# ' ' #' $) #' ## ' ' ) # $ 5% : #' " ' # ' ' >% ' '% # 5' " '% # " #' ' $ % " # % !"# E$ $ $ " 5' $ % ''# 9: $ 3 # ' % ' # # '# 9: 3 % $ 5 '% #' ' ' ' $ 2# ? 8 ' % 9 %#% ' 0=1 071 2# 7 F% !$# & 0.1 " 0?1 ' % # 5' ' 4 9: 3 % 081 " 0<1 5" ' " # ##% $ " " ' #G # " 5'% +, 66/ #' # $ #' 4 5'% C ' ''# #' % C #' ' ' # $ $ ' $#% '' 081 " 0<1 5 " % ,%#% ''# 071 ß !" ß #$ % '' ' ' ' % , $ ' $ 9: 5'% : # ## ' $ ' 5" ' % 9 $# %& $ ' % 2 '5 # ## # ' # 99 0+-./1 '% ! "#$ ! % & '( ''# 0F1 2# 8 4 $ $ " #' % : '' 0F1 # # 4% # ' 2# . 9: '((! $( ()$( % : # >" %% $ '' ' ' '' % & $ 3 $ #% 0: $ #' #% +HH6</1 # # 0' 1 ! $# ' ') ! 9:, '' # ! I ! & # 0I &1 0+I &-./1% ,5 : !## 0I:!1 +C?9-./ " ! I & #' I $ ' % ''# # ' #' 5'% : ' ' (# % ,%#% # 9: 5' ( ' 2D 0 : .1% & $ > $ $ '' '" $ #' 5 ## '' '% B '" ' #' # '# ' # ## $ $ ## # ##% B '' # # 5 #% # +<./ 5" #' # $ 5" 9 # ' % # ' # # # Æ ' 3% # # ## # % '5 #' 5"% ' #' # +: 68/ $ $ "5" # #' #%½ & " Æ #' ' # #' ##% & ' #' # ' #' # '' # #' ''# '% # '# #' '# # # #' % ! 5' ''# # 9:% ''# 2# ? 8 $ ') ' #' 0 ' #1 5" ' ## 9: 5'% $ $ ' ' $ ' ' % & $ ''# ' 0 '1 # $ $ ' # ' ' 0$ " # " 1% $ # '' # ' # # ' % $ # ' " '# ' ) % # # # ' ## $ $ # # #' % & 5' $ 'A' # ' 0.1 0=1 ½ % % (2) :CompositeState :State name = comp Eqns ::= Eqns, State(comp)= State(default) name = comp isConcurrent = false ::= :PseudoState :State name = default kind = initial target :Transition source :State name = s ::= :Event name = e source :Transition :State name = s trigger :Event name = e succ(s,e) ::= e −> State(s1) source trigger :Event name = e ::= :Transition directBeh(s) ::= succ(s,e) [] directBeh(s) (7) :State name = s source :Transition (6) :State name = s trigger :Event name = e target :State name = s1 :State name = s1 & ' !"# !(# ' " % ' 0=1 $ '' 2# < ' : 9': % 9': : %% ## $ '" # 4% ' 0F1 2# < J## K $ ' 0<1 # % ' 071 # 5 $ # 9': :L5% ' > $ 0=1 $ # 5 % ' $ $ 0=1 5 $ : 9': $ '' 071 ' % # # ' $ # 5" % # 5 ' ' # $ #' ' 5" 9 # ' # % ! $ $ '' ''# #' 5 ##% ' ''# #' ## ' " # '## ## 5 5% E5 $ '' ' $%%% '' # '' 3 ( # 2# ? 8 ' % C ' #' '' ' 'A' #' # $ ' 0 1 % $ $ # ' #' ' ' $ % ( 5 ' $# 0#' 1 ' ## # 0 5' # 5 $# 'A' #' #1 0 5'1 $ $% '' # $ '' (% #' # $ # $ > ' % ' #' # '' '# # # # # % >5 # ' " '# '% ( ( 3 '# $ '' % C #' # ' #' # 'A' #' # '' 3 ' #' ' # # '% # '' 3 $ # ( # ''# $# '' % & 3 $ ' ""# 'A' #' # #% ' $ $ # #' ' 'A' #' # 3 # ') D( '# # 5 $ ' # $ $ ' # '# #% # $ # ''# ' ''# $ ' #' # # ' % & ' '' ' #' # ' '# ' ' % 9# % #% # 3 # 3 ''" ' #' # Æ% ' '' 5' $ 4 $% )**+,- . * & * / 0 * 1 / 23/ 4$4 5,"65$( / 7 5++, )**+$- . * & * / 08 3 9 : % 5+6+$ ; <' 5++$ )*<&=>5- & * . <; & ? =% ' 8 7 & 54@65+$ 3 A ">>5 )*<=>5- & * . <; ? =% ? & 3 < ! "##$ % & !' ! %' ( ) % $* "##$ 23/ "54$ "("6"4( / ">>5 )*? ++- 3 * ? & ' && B * = * & * =. < % & ?' +, - - - % . "/ 0 ! % $$56@>C D / 5+++ ): +(- : / * !# 123" 5++( )=<++- 9 = 0 < 0 /1 08 1 ? 3/++5" D' / : 3 / . 5+++ )=4$- 3 ? = 4 A = 5+4$ ).>5- . 3 3 .33 )**++++* * ,-./* ">>5 )A+$- . A%% 0 . "(!"#B5+@ 6 "$$ 5++$ )A (5- D A A 5 $B$@>6$+$ 5+(5 )/+,- /; / ' 6-78( ) ' 6, -% 23/ +>C 5$565@C / 7 5++, )DC3>5- DC3 * / !E/# )**++++0* 1*23* ">>5 )E>5- E E )**+++# *-* ">>5 )FF+(- 9G F < F ? & & B / 9 7A ' ) 9 ! 9!78: "446"+$ 3 5++( *** 3 / A