uml - 用例泛化与扩展

标签 uml use-case

UML 用例图允许使用两种看似等效的方式来显示给定的用例可以通过多种不同的方式实现,即 use case generalizationsuse case extensions 相反。我已经看到以下基本示例使用相同频率的任一方法建模,有时在单个源内。

Use case generalisation image

Use case extension image

在我看来,扩展是比泛化更弱的关系,因为在泛化中必须可以直接替换基本用例的专用用例,但在扩展中则不一定。

在我看来,泛化意味着需要多态实现,而扩展意味着要使用一些分支结构。

void makePayment(const PaymentDetails* pd)
{
   pd->pay();
}

相对于

void makePayment(const PaymentDetails* pd)
{
   switch(pd->type)
   {
       case EFT:
                payViaEFT(pd); 
                break;
       case PAYPAL:
                payViaPayPal(pd); 
                break;
       case CREDITCARD:
                payViaCreditCard(pd); 
                break;
   }
}

用例阶段对于对此类特定于实现的关注点进行建模是不是太早了?对于这一点,有更合适的 UML 图。对于使用两者中的哪一个是否有一个硬性规定?如果是的话,它是什么?

最佳答案

To my mind an extension is a weaker relationship than generalization as a direct substitution of the specialised use case for the base case must be possible in generalization but not necessarily in extensions.

确实如此。

It seems to me that generalisation implies a polymorphic implementation is desired while extension implies some branching structure is to be used.

该图不指示任何实现。 不过,您可以自己解释图表中的提示。 UML 仍然独立于那里的语言和解决方案。

Isn't the Use Case stage far too early for such implementation specific concerns to be modelled?

嗯,如上所述,UML 不强制执行任何特定类型的实现。 但是,您在这里收集了一些重要的功能需求,这些需求可能会极大地影响您的时间安排和工作量。 (“用信用卡支付”比“通过银行转账预付”处理起来要复杂得多)。因此,您会努力捕获这一点,但对不同的解决方案保持开放的态度。

There are much more appropriate UML diagrams for that.

您确实可以并行使用它们:),因为它们是对同一主题的不同观点。

Is there a hard and fast rule regarding which of the two to use and if so what is it?

我更喜欢这种情况下的概括,因为扩展错误地表明可能存在一种不使用这三个指定选项中任何一个的支付方式。正如您自己所指出的。

附录(根据评论):示例图的主要目的是概述预期的付款方式方式。一次付款至少需要一种手段(除非付款被取消),就像“打印”太模糊,没有明确“什么”和“哪里”等。因此,尽管“付款”本身就是一个有效的用例,但我还是倾向于使用概括。

关于uml - 用例泛化与扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15133595/

相关文章:

JAVA UML 接口(interface)多继承错误或错误?

uml - 从(流)端口到 UML 事件图的模型数据流

documentation - 了解新项目中业务逻辑的最快方法

uml - 如何使我的 "Login"用例成为 UML 中其他用例的先决条件

interface - 如何在序列图中表示实现接口(interface)

uml - UML 状态图中具有多个事件的一种转换

java - 尝试将 uml 组合翻译成代码 [uml]

UML用例图工作进度表

coding-style - 是否可以在代码库中嵌入 Cockburn 风格的文本 UML 用例内容以提高代码可读性?

uml - 何时使用用例图和何时使用类图?