for (Item i : collection) {
i.foo();
}
In some abstract sequence diagrams you have a loop combined fragment with a condition along the lines of e.g. [for each item].
On a sequence diagram featuring Java implementation; what would you use as a loop guard?
If all lifelines must represent an object instance, how would you show that i: Item is not a single instance, but on each iteration a different object from the collection?
For the second part of your question, there is a notation to draw multiple instances in the same lifeline using stacked boxes, for example:
from A Quick Introduction to UML Sequence Diagrams
The stacked boxes used for the
figures
variable indicate it refers to multiple instances, which can be interpreted as being a different instance around the loop. (As usual with UML, the semantics a somewhat in the eye of the beholder)P. 571 of the UML 2.5 spec states:
The word "Often" can be interpreted as "take what is needed" as it does not obtrude the use of a single specific form.
Unfortunately it cannot be done. The loop operator has a
guard
condition and a number of iterations betweenminint
andmaxint
. I think, this doesn't allow "for each loop" semantics. If you want to add this, it must be done with a user defined stereotype«for each loop»
: An example usage is:Please note that the note symbol is a not a
comment
, but the notation for the stereotype properties. They reference the propertye
ofClient1
andi
of the InteractionExample1
(see diagram below). The i-Property is represented by a Lifeline and will refer to a different object in each occurrence of the loop content. This is achieved here by the user defined semantics of my«for each loop»
.As an alternative you could add a semantic free
comment
with the same content. Misusing theguard
for this purpose is not recommended.If you want to use a java like iterator the diagram could look like this:
This diagram also shows, how to refer to different objects over time: The return value of a
reply
message is assigned to aProperty
of the Interaction or of the Class represented by the Lifeline or aParameter
.You don't show each single bit in a SD but just an overview: it's an abstraction.
This quite clearly shows the intention of your loop.
You would show different
Item
instances only if you want to show different behavior during the loop.