The following is a glossary of traditional English-language terms used in the three overarching cue sports disciplines: carom (or carambole) billiards referring to the various carom games played on a billiard table without pockets; pool, which denotes a host of games played on a table with six pockets; and snooker, played on a large pocket table, and which has a sport culture unto itself. We would like to show you a description here but the site won’t allow us.
Let's start by describing the basic notation (there's more) that I've used in Figures 1 and 2:
The activity diagram of Figure 1 depicts one way to model the logic of the Enroll in University use case, a very common use of activity diagrams because they enable you to depict both the basic course of action as well as the alternate courses. Activity diagrams can also be drawn that cross several use cases, or that address just a small portion of a use case. You can also use activity diagrams without use cases being involved at all, for example a pair of eXtreme Programming (XP) developers (Beck 2000) could draw activity diagrams with their customer (the XP term for stakeholder) to analyze a user story or a larger business process that a user story supports.
Figure 1. UML activity diagram for the Enroll in University use case.
Figure 1 is notable for several things:
Figure 2 depicts the Enroll in University use case but takes a different approach than. As noted above it avoids the use of decision points. It also uses the concept of partitions, also called swim lanes, to indicate who/what is performing the activity. In this diagram I simply labeled the partitions with the text Applicant, Registrar, and System although it is also common to put actor symbols (stick figures) to make it very clear that an actor is performing some activities. Partitions are useful because they provide more information, but they also elongate the diagram - I ran out of room and was forced to finish the diagram on another whiteboard (not shown), using a connector (the circle with the letter A in it), to help show how the physical separate portions fit together. A common use of connectors is to avoid a line going from one side of a diagram to another. Instead you show a flow entering a connector and a second flow leaving a similarly labeled connector, e.g. both connectors have the letter B in them, going into the target activity. Figure 2 also depicts how to apply a flow final, the circle with the X through it, as well as a note to indicate a constraint on a merge, as noted above.
Figure 2. UML activity diagram with partitions based on actors.
The style of partitions in Figure 2 is often referred to as 'swim lanes' because the partitions look like the lanes in a swimming pool. Figure 3 takes a different approach, I guess you could call the partitions 'swim areas'. As you can see swim areas take up less room than swim lanes. It's also interesting to note that the partitioning strategies between the two diagrams are different - Figure 2 is partition by actor whereas Figure 3 is partitioned by courses of action within a use case. As always, my advice is to use the strategy best suited for your situation.
Figure 3 uses a notation that we haven't seen before, the five-sided Possible Security Risk signal. This symbol indicates that an event has occurred, that we've determined that there is a possible security risk, and therefore the Perform Security Check use case may need to be triggered.
Figure 4 depicts a UML activity diagram for the Distribute Schedules use case, this time I've used a drawing tool so you can see a clean example of the notation. The activity starts when the Schedule Printed signal is received, this signal would be sent from one or more other activity diagrams, and it's April 1st (or later). The hour-glass symbol represents time, and because all of the flows going into a join must occur before processing can continue the way that you would read this is that the schedules must be printed and it has to be at least April 1st. In fact, I've chosen to indicate this with a join specification, basically a constraint associated to a join in the format {joinSpec = …}. In this case the join specification is completely redundant so there isn't any value in indicating it other than the fact that I wanted to show you an example. The only time that I indicate join specifications is when there is a constraint that isn't obvious from the incoming flows. For example, if the schedules needed to be distributed before April 21st then I would likely indicate this with a join specification.
The square on the side of the Determine Mailing List activity in Figure 4 is called a pin, and the one on the side of the Print Mailing Label activity is a parameter. The circle on the flow indicates a transformation, in this case the people on the mailing list are sorted by zip code (the post office charges less for bulk mailings that are sorted in this manner) and then each individual is listed so that a mailing label can then be printed for each individual.
The Labeled Schedule box is an example of an object being passed between activities. I rarely show objects in this manner as I feel this notation is a little bit goofy. You can usually read between the lines and determine what is flowing between activities, for example it is clear that labels are being passed from the Print Mailing Label activity to the Attach Labels to Schedules activity.
This artifact description is excerpted from Chapter 9 of The Object Primer 3rd Edition: Agile Model Driven Development with UML 2.
The notation used in these diagrams, particularly the hand drawn ones, may not conform perfectly to the current version of the UML for one or more of reasons:
If you're really concerned about the nuances of 'official' UML notation then read the current version of the UML specification.