Communication diagram
Easy, understandalbe diagram that shows which componenst with what methods communicate to others.
Example

Frame
There is no specific long or short form name for communication diagram heading types.
interactionandsdcan be used as communication's label

Lifeline
Lifeline is a specialization of named element which represents an individual participant in the interaction
A Lifeline is shown as a rectangle (corresponding to the "head" in sequence diagrams). Lifeline in sequence diagrams does have "tail" representing the line of life whereas "lifeline" in communication diagram has no line, just "head".
Lifeline Notation
lifeline-ident ::= ([ connectable-element-name [ '[' selector ']' ] ] [: class-name ] [decomposition] ) \| 'self' |
selector ::= expression |
decomposition ::= ‘ref’ interaction-ident [ 'strict' ] |
Classifier
| Anonymous | Named | Indexed |
|---|---|---|
![]() |
![]() |
![]() |
| only the class is specified | Class and the variable name is specified | x of class X is selected with the selector [k] |
Message

This is the whole point of the communication diagram
Method calls, order, guards and directions this is about
Sequence expression
The sequence expression is a dot separated list of sequence terms followed by a colon (:) and message name after that:
sequence-expression ::= sequence-term '.' . . . ':' message-nam
For example
3b.2.2:m5contains sequence expression3b.2.2and the message name ism5
Sequence term
sequence-term ::= [ integer [ name ] ] [ recurrence ]
The integer represents the sequential order of the message within the next higher level of procedural calling (activation). Messages that differ in one integer term are sequential at that level of nesting.
For example,
- message with sequence
2follows message with sequence1, 2.1follows25.3follows5.2within activation51.2.4follows message1.2.3within activation1.2.

Concurency
Instance of
Asendsdraw()message to intance ofB, and after thatBsnedspaint()toC
The name represents a concurrent thread of control. Messages that differ in the final name are concurrent at that level of nesting.
- messages
2.3aand2.3bare concurrent within activation2.3, 1.1follows1aand1b,3a.2.1and3b.2.1follow3.2.

Instance of
Asendsdraw()messages concurrently to instance ofBand to instance ofC
Guards
2.3b [x>y]: draw()- message
draw()will be executed ifxis greater thany,
- message
1.1.1 [s1.equals(s2)]: remove()- message
remove()will be executed ifs1equalss2.
- message

Instance of class
Awill send messagedraw()to the instance ofC, ifx > y
Repetition (iteration)
An iteration specifies a sequence of messages at the given nesting depth. UML does not specify iteration-clause syntax, so it could be expressed in pseudocode, some programming language, or something else. Iteration clause may be omitted, in which case the iteration conditions are unspecified.
The * iteration notation specifies that the messages in the iteration will be executed sequentially. The *|| (star followed by a double vertical line) iteration notation specifies concurrent (parallel) execution of messages.
4.2c *[i=1..12]: search(t[i])- search() will be executed 12 times, one after another
4.2c *||[i=1..12]: search(t[i])- 12 search() messages will be sent concurrently,
2.2 *: notify()- message notify() will be repeated some unspecified number of times.

Instance of class
Awill sendsearch()message to instance ofBntimes, one by one

Instance of class
Awill sendnconcurrentsearch()messages to instance ofBYes,
||is the paralel message's symbol


