【发布时间】:2013-02-28 10:51:30
【问题描述】:
UML 用例图允许两种看似等效的方式来显示给定的用例可能以几种不同的方式实现,即use case generalizations 与use case extensions 相对。我已经看到以下基本示例使用相同频率的任一方法建模,有时在单个源中。
在我看来,扩展是比泛化更弱的关系,因为在泛化中必须可以直接替换基本用例的专用用例,但不一定在扩展中。
在我看来,泛化意味着需要多态实现,而扩展意味着要使用一些分支结构。
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 图。关于使用这两者中的哪一个,是否有硬性规定?如果是,那是什么?
【问题讨论】:
-
两种实现都模拟了相同的问题。它们与一个或多个 UC 图表无关。多态的更受欢迎,因为它更简单、更容易扩展并且更少受人为错误的影响。