1

我有一个父用例。我不想让用户使用父用例。我只希望用户可以访问子用例。将其视为 Java 中的抽象类。你永远不能实例化一个抽象类。用例图允许这种行为吗?

4

4 回答 4

1

@observer 的答案几乎是完美的(我已经 +1 了 :)),除了他没有完全回答你的问题。

在您的情况下,您可能会做的事情如下:

在此处输入图像描述

  • Actor0将设法Pay bill,无论是Pay with credit cardPay with PayPal
  • 另一方面,Actor1将只能Pay with credit card

意思是:

  1. 使用泛化来建模“父”用例与其“子”之间的关系。
  2. 让您想要“访问”的参与者只有一个孩子,只与那个用例相关联。
于 2013-06-14T20:00:35.233 回答
1

是的,可以有“父”或“子”用例。用于对这种关系建模的连接器称为generalization. 请参见此处:用例泛化与扩展此处还给出了一个包含图表的示例。

请注意:如果您对一个用例进行泛化建模,那么这与一个用例不同(!)<<extend>>

您可以在文本用例描述中添加有关调用约束的注释。

于 2013-05-28T09:39:15.623 回答
-2

是的!(也是最终的,因为 UseCase 是分类器的特化)。

引用统一建模语言 (OMG UML),上层结构:

概括

  • UseCase(来自 UseCases)专门研究BehavioredClassifier(来自 BasicBehaviors,Communications)。

  • BehavioredClassifier专门用于分类器(来自 Kernel、Dependencies、PowerTypes、Interfaces)。

属性分类器具有以下属性:

  • isAbstract:布尔值(如果为真,则分类器不提供完整的声明,通常无法实例化)。

  • isFinalSpecialization : 布尔值(如果为真,分类器不能通过泛化来特化)。

约束:分类器只能专门化有效类型的分类器。

   self.parents()->forAll(c | self.maySpecializeType(c))

附加操作

查询maySpecializeType()确定此分类器是否可能与指定类型的分类器具有泛化关系。默认情况下,分类器可以专门化相同或更通用类型的分类器。

Classifier::maySpecializeType(c : Classifier) : Boolean;
maySpecializeType = self.oclIsKindOf(c.oclType)

最后但并非最不重要的一点是,即使它说maySpecializeType()“旨在由具有不同专业化约束的分类器重新定义”......maySpecializeType()对于UseCaseBehavioredClassifier没有重新定义。

来源:统一建模语言 (OMG UML),上层结构,版本 2.4.1。

于 2013-02-19T21:32:46.363 回答
-2

你的术语有点不对劲,但总的来说答案是肯定的。

没有“父”或“子”用例之类的术语。通常,用例是由用户触发的行为。您似乎需要的是由include基础和包含的用例之间的关系来描述的。它用于提取公共功能块以供不同用例重用。例如:用例包含关系示例

在此处查看更多信息:用例图中的包含和扩展有什么区别?

于 2013-03-22T11:06:53.013 回答