<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://training-course-material.com/index.php?action=history&amp;feed=atom&amp;title=OCUP2F_06_Activity_Diagram</id>
	<title>OCUP2F 06 Activity Diagram - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://training-course-material.com/index.php?action=history&amp;feed=atom&amp;title=OCUP2F_06_Activity_Diagram"/>
	<link rel="alternate" type="text/html" href="https://training-course-material.com/index.php?title=OCUP2F_06_Activity_Diagram&amp;action=history"/>
	<updated>2026-04-21T08:52:47Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://training-course-material.com/index.php?title=OCUP2F_06_Activity_Diagram&amp;diff=82360&amp;oldid=prev</id>
		<title>Ivasiletc at 10:14, 28 April 2021</title>
		<link rel="alternate" type="text/html" href="https://training-course-material.com/index.php?title=OCUP2F_06_Activity_Diagram&amp;diff=82360&amp;oldid=prev"/>
		<updated>2021-04-28T10:14:46Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Category:Private]]&lt;br /&gt;
[[Category:OCUP2]]&lt;br /&gt;
==Module 2. Activity Diagram⌘==&lt;br /&gt;
===References⌘===&lt;br /&gt;
* Filip Stachecki, Concurrency in UML, White Paper, March 2014&lt;br /&gt;
===Activity Diagram⌘===&lt;br /&gt;
[[File:ActivityDiagramENExample.png]]&lt;br /&gt;
*Describes the workflow behavior of a system, focuses on flows.&lt;br /&gt;
* A Process describes a sequence or flow of Activities in an organization with the objective of carrying out work.&lt;br /&gt;
===Activity, Action⌘===&lt;br /&gt;
[[File:ActivityAction.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Activity&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*describes a &amp;#039;&amp;#039;&amp;#039;sequence of actions&amp;#039;&amp;#039;&amp;#039; based on control models and object flow models&lt;br /&gt;
*contains edges and activity nodes (e.g. actions)&lt;br /&gt;
*represented by a rectangle with rounded corners&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Action&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* is a fundamental unit of executable functionality contained within an Activity&lt;br /&gt;
* represents a &amp;#039;&amp;#039;&amp;#039;single step&amp;#039;&amp;#039;&amp;#039; within an activity&lt;br /&gt;
&lt;br /&gt;
===Activity ⌘===&lt;br /&gt;
[[File:ActivityNodeEdge.png]]&lt;br /&gt;
&lt;br /&gt;
Activity contains nodes and edges.&lt;br /&gt;
====Activity Node ⌘====&lt;br /&gt;
[[File:ActivityNodeMetamodel.png]]&lt;br /&gt;
&lt;br /&gt;
Subtypes of Activity Node&lt;br /&gt;
&lt;br /&gt;
[[File:ActivityNode.png]]&lt;br /&gt;
&lt;br /&gt;
====Activity Edge⌘====&lt;br /&gt;
[[File:ActivityEdge.png]]&lt;br /&gt;
* The edges of an activity&lt;br /&gt;
* Denoted by a straight line with an open arrowhead&lt;br /&gt;
=====Control Flow⌘=====&lt;br /&gt;
[[File:ActivityControlFlow.png]]&lt;br /&gt;
* A control flow is an edge that starts an activity node after the previous one is finished&lt;br /&gt;
=====Object Flow⌘=====&lt;br /&gt;
[[File:ObjectFlow.png|333px]] &amp;#039;&amp;#039;&amp;#039;OR&amp;#039;&amp;#039;&amp;#039; [[File:ObjectFlow2.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:ObjectFlow3.png]]&lt;br /&gt;
* An object flow is an activity edge that can have objects or data passing along it&lt;br /&gt;
&lt;br /&gt;
===Objects⌘===&lt;br /&gt;
[[File:ObjectNodeMetaModel.png]]&lt;br /&gt;
* Object Node is used to describe object flow within an activity&lt;br /&gt;
* Notation: rectangle&lt;br /&gt;
====Pin or Parameter⌘====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Parameter&amp;#039;&amp;#039;&amp;#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:ActivityParameter.png]]&lt;br /&gt;
*Incoming or outgoing objects connected to an activity are parameters&lt;br /&gt;
*Placed (as rectangles) on the border&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;#039;&amp;#039;&amp;#039;Pin&amp;#039;&amp;#039;&amp;#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:ActionPin2.png]]&lt;br /&gt;
*Or as small rectangle, called a pin (&amp;#039;&amp;#039;&amp;#039;input&amp;#039;&amp;#039;&amp;#039; or &amp;#039;&amp;#039;&amp;#039;output&amp;#039;&amp;#039;&amp;#039;) connected to actions&lt;br /&gt;
=====Pin or Parameter example⌘=====&lt;br /&gt;
[[File:ClipCapIt-141105-113509.PNG]]&lt;br /&gt;
=====Stream and exception parameter⌘=====&lt;br /&gt;
[[File:ClipCapIt-150904-122128.PNG]]&lt;br /&gt;
* Streaming parameters allow values to be passed into and out of a Behavior execution any time during its course, rather than just on invocation and completion.&lt;br /&gt;
* Exception Parameter (output only) is annotated with a small triangle.&lt;br /&gt;
&lt;br /&gt;
===Token⌘===&lt;br /&gt;
*The semantics of an activity is based on a token flow&lt;br /&gt;
*Control tokens and object tokens flow &amp;#039;&amp;#039;&amp;#039;between&amp;#039;&amp;#039;&amp;#039; nodes &amp;#039;&amp;#039;&amp;#039;over&amp;#039;&amp;#039;&amp;#039; edges&lt;br /&gt;
* An &amp;#039;&amp;#039;&amp;#039;object token&amp;#039;&amp;#039;&amp;#039; with no value in it is called a &amp;#039;&amp;#039;&amp;#039;null token&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
* A null token can be passed along an object flow and invoke behavior without passing any value.&lt;br /&gt;
&lt;br /&gt;
===Activity Example⌘===&lt;br /&gt;
[[File:ActivityExample.png]]&lt;br /&gt;
&lt;br /&gt;
===Control Nodes⌘===&lt;br /&gt;
[[File:ClipCapIt-141105-111637.PNG]]&lt;br /&gt;
* Control Node is used to manage the flow of tokens between other nodes in an Activity.&lt;br /&gt;
====Initial Node⌘====&lt;br /&gt;
[[File:ActivityInitialNode.png]]&lt;br /&gt;
&lt;br /&gt;
* It has outgoing edges but no incoming edges&lt;br /&gt;
* An activity may have more than one initial node&lt;br /&gt;
** Each generates a concurrent flow&lt;br /&gt;
* An initial node can have more than one outgoing edge&lt;br /&gt;
** Semantics: a control token at each outgoing edge&lt;br /&gt;
* Activity diagrams do not have to have initial nodes&lt;br /&gt;
* Notation: a filled circle&lt;br /&gt;
&lt;br /&gt;
====Activity Final Node⌘====&lt;br /&gt;
[[File:ActivityFinalNode.png]]&lt;br /&gt;
&lt;br /&gt;
*An activity may have more than one activity final node&lt;br /&gt;
*The first one reached stops all flows in the activity&lt;br /&gt;
** Regardless of the number of tokens in activity&lt;br /&gt;
* At least one incoming edge and no outgoing edges&lt;br /&gt;
* If several incoming edges only one must carry a token&lt;br /&gt;
* Activity diagrams do not have to have final nodes&lt;br /&gt;
* Notation: a filled circle with an outer ring&lt;br /&gt;
====Flow Final Node⌘====&lt;br /&gt;
[[File:ClipCapIt-150923-231210.PNG]]&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;A Flow Final Node&amp;#039;&amp;#039;&amp;#039; is a Final Node that terminates a flow by consuming the tokens offered to it.&lt;br /&gt;
&lt;br /&gt;
====Decision⌘====&lt;br /&gt;
[[File:ActivityDecision.png]]&lt;br /&gt;
* is a control node that chooses between outgoing flows&lt;br /&gt;
* One incoming edge and several outgoing edges&lt;br /&gt;
* When a token is supplied guards on outgoing edges are evaluated&lt;br /&gt;
** Token goes to first true outgoing&lt;br /&gt;
* Notation: a rhombus&lt;br /&gt;
&lt;br /&gt;
====Merge⌘====&lt;br /&gt;
[[File:ActivityMerge.png|350px]]&lt;br /&gt;
* A merge node is a control node that brings together multiple alternate flows&lt;br /&gt;
**It is not used to synchronize concurrent flows&lt;br /&gt;
*Several incoming edges, one outgoing edge&lt;br /&gt;
*Nothing calculated, nothing expected&lt;br /&gt;
*Notation: an empty rhombus&lt;br /&gt;
* incoming to and outgoing from a Merge must be either all Object Flows or all Control Flows.&lt;br /&gt;
=====Decision example⌘=====&lt;br /&gt;
[[File:ClipCapIt-141104-174135.PNG]]&lt;br /&gt;
&lt;br /&gt;
====Fork, Join⌘====&lt;br /&gt;
[[File:ClipCapIt-141104-174247.PNG]]&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Fork&amp;#039;&amp;#039;&amp;#039; – one incoming edge and multiple outgoing edges&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Join&amp;#039;&amp;#039;&amp;#039; – multiple incoming edges and one outgoing edge&lt;br /&gt;
&lt;br /&gt;
=====Join with Object Flow⌘=====&lt;br /&gt;
[[File:ClipCapIt-141105-105041.PNG]]&lt;br /&gt;
* If one of the incoming flows of a Join Node is an Object Flow, then its outgoing flow must be an Object Flow.&lt;br /&gt;
=====Fork with Object Flow⌘=====&lt;br /&gt;
[[File:ClipCapIt-141105-105751.PNG]]&lt;br /&gt;
* The Activity Edges incoming to and outgoing from a Fork Node must be either all Object Flows or all Control Flows.&lt;br /&gt;
&lt;br /&gt;
====Implicit splitting⌘====&lt;br /&gt;
[[File:ImplicitSplitting.png]]&lt;br /&gt;
&lt;br /&gt;
Once action A terminates&lt;br /&gt;
* a control token is available at both outgoing edges&lt;br /&gt;
* actions B and C start concurrently&lt;br /&gt;
&lt;br /&gt;
====Implicit synchronization⌘====&lt;br /&gt;
[[File:ImplicitSynchronization.png]]&lt;br /&gt;
&lt;br /&gt;
Action F doesn&amp;#039;t start until tokens are available at both incoming edges - actions D and E have to terminate&lt;br /&gt;
&lt;br /&gt;
====Implicit split/synchronization - object flow⌘====&lt;br /&gt;
[[File:ImplicitObjectFlow.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;AND&amp;#039;&amp;#039;&amp;#039; semantics for object flows&lt;br /&gt;
*Once action A terminates it provides two object nodes&lt;br /&gt;
*Action F doesn&amp;#039;t start until object tokens are available at both incoming edges - actions D and E have to terminate&lt;br /&gt;
====Fork/Join and Merge mix⌘====&lt;br /&gt;
[[File:ClipCapIt-150826-111522.PNG]]&lt;br /&gt;
&lt;br /&gt;
===localPrecondition and localPostcondition⌘===&lt;br /&gt;
[[File:ClipCapIt-141104-083658.PNG]]&lt;br /&gt;
* localPrecondition for an Action is constraint that should hold when an execution of an Action starts &lt;br /&gt;
* localPostcondition for an Action is constraint that should hold when an execution of an Action completes&lt;br /&gt;
===Call Actions⌘===&lt;br /&gt;
====Call Behavior Action⌘====&lt;br /&gt;
[[File:ClipCapIt-141104-160811.PNG]]&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Call Behavior Action&amp;#039;&amp;#039;&amp;#039; invokes a Behavior directly&lt;br /&gt;
&lt;br /&gt;
====Call Operation Action⌘====&lt;br /&gt;
[[File:ClipCapIt-161003-162232.PNG]]&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Call Operation Action&amp;#039;&amp;#039;&amp;#039; transmits an Operation call request message to the target object&lt;br /&gt;
&lt;br /&gt;
===Send Actions⌘===&lt;br /&gt;
[[File:ClipCapIt-141104-160925.PNG]]&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Send Signal Action&amp;#039;&amp;#039;&amp;#039; creates a Signal instance and transmits the instance to the object given on its target&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Broadcast Signal Action&amp;#039;&amp;#039;&amp;#039; transmits the signal instance to all available target objects in the system.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Send Object Action&amp;#039;&amp;#039;&amp;#039; transmits any kind of object to the object given on its target&lt;br /&gt;
&lt;br /&gt;
===Accept Event Actions⌘===&lt;br /&gt;
[[File:ClipCapIt-141104-155216.PNG]]&lt;br /&gt;
* Accept Event Action waits for a specific event to occur. &lt;br /&gt;
====Accept Event Actions examples⌘====&lt;br /&gt;
[[File:ClipCapIt-141104-155340.PNG]]&lt;br /&gt;
===Weight⌘===&lt;br /&gt;
[[File:ClipCapIt-141128-145321.PNG]]&lt;br /&gt;
* Weight specifies minimum number of tokens that must traverse the Activity Edge at the same time. &lt;br /&gt;
* Once the minimum number of tokens are offered, all the tokens offered by the source are offered to the target all at once.&lt;br /&gt;
* If no weight is specified, this is equivalent to specifying a constant value of 1.&lt;br /&gt;
===Activity/Action Meta Model⌘===&lt;br /&gt;
[[File:ActivityMetaModellFull.png]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ivasiletc</name></author>
	</entry>
</feed>