分叉/联接节点对令牌的行为与活动图的其他节点之间的区别

时间:2018-09-05 09:06:58

标签: uml activity-diagram

Thomas Kilian所述here所述,带有令牌的活动图节点的正常行为是:

  

当一个节点的所有传入InformationFlow connectors都到达一个令牌时,该节点就变为活动状态。节点完成时,它将沿着所有传出的InformationFlow连接器发送单个令牌。

但是他补充说:

  

有一些特殊的节点,例如fork和merge,其行为有所不同

我知道“合并”节点的行为有所不同,因为它通过接收第一个令牌立即变为活动状态,并接受多个备用流中的一个。但是具有正常行为的令牌的fork / join节点的行为之间有什么区别?

1 个答案:

答案 0 :(得分:1)

library(shiny) script <- ' Shiny.addCustomMessageHandler("jsCode", function(message) { eval(message.value); }); function hello() { console.log("hello from function hello!"); }; ' ui <- fluidPage( tags$head(tags$script(HTML(script))), actionButton("go", label = "Run") ) server <- function(input, output, session) { observeEvent(input$go, { session$sendCustomMessage(type='jsCode', 'Shiny.onInputChange("foo", "bar");') print(input$foo) # output is NULL session$sendCustomMessage(type='jsCode', 'hello();') # this does not work either. This is how I originally intended to do this. # By defining a javascript function that aggregates the user selection data and # send it to the server via Shiny.onInputChange }) } shinyApp(ui = ui, server = server) -和Merge看起来相同,但是元素不同:enter image description here

在图中,您只能通过查看传入和传出DecisionNode来区分两者。第一个具有多个传入和一个传出,而第二个具有相反的关系。 InformationFlow接受任何传入令牌并将其直接转发到其单个传出MergeNode。因此,与InformationFlow不同的是,它不会等待所有令牌。相反,Action仅接受单个令牌,并使其仅传递到其传出的DecisionNode中的一个。建模者有责任以只有一个人评估为正确的方式来设置防护。如果有更多InformationFlow(甚至没有人看守),令牌将采用任意的自由路线。

InformationFlowFork也是看起来相同的两个不同元素:enter image description here(或垂直)。

您还可以通过输入Join的数量来区分它们。 InformationFlow一进一出,Fork反之亦然。一旦令牌到达其单个传入的JoinFork将发送与发出的InformationFlow一样多的令牌。 InformationFlow(像Join一样)将等待令牌到达其所有传入Action的令牌。只有这样,它才会在其单个传出InformationFlow处出现单个令牌。

因此,虽然InformationFlow-和Merge控制单个令牌的流(执行路径),DecisionNodeFork用于启动和同步并行执行路径。