> [Actor]-->(USE CASE)-->[Actor]
Is just more explicit than
> [Actor](USE CASE)[Actor]
When adding arrows you you add more meaning to the diagram. Without arrows you don't know how the interaction between the actor and the use case really is.
Example,
> [Actor]-->(USE CASE)-->[Actor]
Could be that one actor invokes something in a system that will alert another actor.
>
> When adding arrows you you add more meaning to the
> diagram. Without arrows you don't know how the
> interaction between the actor and the use case really
> is.
This idea of refinement is common throughout UML. E.g. you will see the same thing with Class diagrams, which often start as simple blocks and lines at the Domain Level and ultimately resovlve to detailed physical Class diagrams including association, members and methods.
To echo what the other two respondents already covered, it simply provides more information about the interaction between the actor and the use case. That being said, as soon as I see this type of directed interaction it immediately leads me to ask "what makes this interaction only one way?" and "is there ever a time where the interaction will be reversed?".
Jonathan House
Thanks everyone!
I have another question, when a use case includes another use case, we won't say which one will perform first right?
For example:
[order]--include->[login]
It seems that in order to make an order for a product, login is necessary.
[update news]--include-->[save news]
This seems that when updating news, it should be saved.
Well, when you << include >> a use-cause it means that it comes before (just like when you are programming and choose to include code).
In the second example:
[update news]--include-->[save news]
you would use an << extend >> instead.
You can use << extend >> when one use-case is an option in another use-case.
Example, The user wants a system where he can click to update a news item. If he makes any changes he wants to be able to click on a widget to save the changes.
This could be expressed as:
[update news]-- << extend >> -->[save news]
All that the <includes> stereotype means is that the functionality in one use case is a subset of the functionality in another (includes). There is no implication about ordering of the functionality.
As far as <extends> is concerned, that implies that the functionality of one use case "extends" the functionality of another - implying a more refined or comprehensive functional requirement than the original use case.
In any event there is no implicit time ordering of this functionality. You express that within the context of a specific use case by identifying a flow of events:
1. User selects "new account"
2. System creates new account
3. User enters name of account
etc...
Jonathan House
i agree that <<include>> does not imply any ordering.
however, <<extends>> can be used with an "extension point" that defines a point from which the use case can be extended. A condition is associated with the extension point so that a use case instance can choose whether or not to perform the functionality defined in the extending use case.
there is a detailed explanation with examples in the UML specifications in Section 2(Semantics) . Use Cases - detailed semantics. available from www.omg.org/uml.
regards,
Alex