用例是否可能根据触发它的 Actor 而有不同的操作?

Is it possible for use case to have different action depending on which Actor triggers it?

UML 允许这样做吗?

我可以定义参与者如何与用例交互吗? 换句话说,一个用例是否可以根据触发者的不同而有不同的操作? 例如下图中,Client 支付食物费用,waiter 接受付款,但 client 和 waiter 连接到同一个用例。为服务员制作一个名为 "Receive the payment" 的单独用例不是更方便吗?

UML允许这样的事情,但它们是废话(就像你可以用英语说废话)。用例代表其主要参与者的附加值。如果您有一些 UC Pay for food,这只是 Waiter 的 UC,而不是 Client。后者只是次要演员,当然他没有从这个 UC 中获得附加值——恰恰相反。

很容易。 UC 图对此有特殊的说法。

您可以有一个付款操作,该操作将 Include 收款和付款操作。这是绝对正常的。

不要忘记,用例图不一定是项目中最常见的图。 UML 直言不讳地不将图表限制在抽象级别。因此,您可以在没有 include 子任务的情况下创建更常见的用例,然后使用 include 来创建更具体的用例。第一个是给客户看的,第二个可能不会。

如果您想遵循非常严格的方式描述客户如何与讨论中的系统作为系统交互,那么您没有服务员作为演员,它是系统的一部分,不属于该级别的图表。


Is it possible for use case to have different action depending on which Actor triggers it?

从技术上讲是的,但闻起来很难闻。考虑将公共部分拆分为单独的场景(这可能还需要创建一个新的公共角色)。无论如何,这与您的问题的主要部分无关。

Client pays for food, and waiter accepts the payment, but client and waiter are connected to the same use case.

这里是棘手的部分。它们没有连接到 相同的 用例,只有客户端连接到您的 "Pay for food"。用例描述了 Actor 和正在讨论的系统的相互作用。在"Pay for food" Waiter是系统的一部分,你只是没有它作为这个级别的演员。

Wouldn't it be more convenient, to make separate use case called "Receive the payment" for waiter?

这实际上与方便无关,但是是的。您在某些高级 "Client eats in restaurant" 场景中有 "Client pays for food" 步。您可以使用 "System provides a receipt"、"Client gives cash"、"System returns change".

等步骤将其扩展到更低一级的场景

现在您可以在子功能级别将 "System provides a receipt" 扩展到另一个场景,您最终可以将 Waiter 介绍为演员并描述他如何去收银台、用徽章解锁、选择 table,点击"print receipt"...在这个关卡的图上你最终会把Waiter当演员