katonda
katonda

Reputation: 1

PlantUML groups, rectangles, partitions, etc in Use Case diagrams

Is it possible to define the use cases outside of the groups?

I'd like to be able to do something like:

actor Guest as g

usecase "Eat Food" as UC1
usecase "Pay for Food" as UC2
usecase "Drink" as UC3
usecase "Review" as UC4

package Restaurant {
UC1
UC2
UC3
UC4
}

g --> UC1
UC1 --> UC2

etc..

But I'm getting an error, using the package and the alias. Is there another way to structure this to get it to work?

Or do I need to nest the use cases within the group's {}? E.g:

actor Guest as g

package Restaurant {
usecase "Eat Food" as UC1
usecase "Pay for Food" as UC2
usecase "Drink" as UC3
usecase "Review" as UC4
}

g --> UC1
UC1 --> UC2

Upvotes: 0

Views: 672

Answers (1)

Christophe
Christophe

Reputation: 73530

What you want to do is not feasible in plantuml. The first reason is that plantuml uses the first graphical scope (top level, package, rectangle) where a use-case appears. For example:

'UC XYZ First seen and defined at top level
:Actor1:  -- (XYZ) 

'UC WXY and ZEE first seen and defined in package
package A {
(XYZ)
(WXY)
(ZEE)
}

'UC WXY already defined and just used without altering scope
:Actor1: -- (WXY)

enter image description here

This rule can be observed if nesting this snippet in a rectangle or package: XYZ would then be enclosed in this nesting graphical scope.

According to this principle, if your snippet wouldn't be blocked by a syntax error, all your use-cases would be shown at top-level and the package would remain empty.

The syntax error from which you suffer seems to be related to a parsing bug. Indeed, aliases are well recognized in associations. New aliases introduced in associations by default are actors, but an alias alone on a line, be it new or already defined, be it in a package or at top level, is considered as a syntax error. Here are some example of valid use of aliases:

actor Guest as g
usecase "Eat Food" as UC1
usecase "Pay for Food" as UC2
package Restaurant {
X -> Y
}
g --> UC1
Bob -> Alice
Alice -> Bob
UC2 -> UC1

enter image description here

As said, if this error would be resolved, it would still not solve your problem, as this workaround using the syntax without alias, shows (and completely useless in view of what you want to achieve):

actor Guest as g
usecase (Eat Food) 
usecase (Pay for Food)
package Restaurant {
(Eat Food)
(Pay for Food)
}
g --> (Eat Food)

Note however that plantuml's approach are more in line with UML packages. In UML the package is not a graphical element in which you position elements, but a a namespace, meaning that two packages could use the same use case name for two different use cases, e.g. Restaurant.UC1 and Cantine.UC1, using the package name as prefix to disambiguate . Plantuml does not support this yet. But if it will, the current syntax would make it backwards compatible.

Upvotes: 0

Related Questions