Towards automatic translation of UML models into semantic domains

 ! "
# ! $
! %
& '' $ ( $ # ' # ) * ' !% # ''
# ' %
* ''
# # ' # ''' ' ' +,-./% ''' $ '
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