2013年9月2日星期一08:39

通用和用例模型,第2部分

撰写者

介绍

文章的 第一部分 通过类的泛化(和专化)的面向对象示例来搭建舞台,然后讨论用例参与者的泛化。 第二部分继续用例的概括,最后总结用例适用的舞会森林。

通用使用案例

为什么用例可以泛化

In [1],UseCase是BehavioredClassifier的子类,而BehavioredClassifier是Classifier的子类。 因为泛化是Classifier的功能,所以UseCase从该类继承该功能。 换句话说,用例可以按用例层次结构排列。

一个例子

想象一下,为旅行网站生成一个用例模型,然后发现具体用例“预订汽车,预订航班和预订旅馆”都是基于一个核心预订过程,并且仅在某些细节上有所不同。 您如何一次定义核心预订流程并解决每个具体用例的独特细节? 

当然,通过使用用例的概括!  See next diagram (一世)(ii).

MVGAug6th-1

用例一般化(和专门化)导致用例层次结构。

用例层次结构意味着什么

因为我们要归纳三个已经存在的具体用例,所以得到的归纳用例是“完全划分的”(完全细分为子用例),因此是抽象的(不能在其中创建用例)。

与任何一般化一样,子用例和超级用例之间的类型对应是必须的。 “预订汽车是预订旅行组件的类型”,“预订航班是预订旅行组件的类型”和“预订旅馆是预订旅行组件的类型”这两种说法都是正确的,因此使用案例层次结构是合适的。

当具体用例与通用用例具有通用关系时,这意味着在运行时,通用用例的规范和具体用例的规范被组合成一个单一的用例规范,该规范用于管理每个用例的行为。具体的用例。

  • 具体的“预订汽车”用例实例的行为受“预订旅行组件”和“预订汽车”用例的组合用例规范支配。
  • 永远不会有Book a Trip Component用例实例。

用例规格

通用用例的规范:

  • 定义发起方,只要这是所有专业化用例所共有的。
  • 定义所有专业化用例共有的支持参与者。 
  • 定义所有专业化用例共有的步骤。
  • 可以定义适用于某些但不是全部专业化用例(*)的默认步骤。
  • 可以为要由一个或多个专业化用例(**)定义的步骤定义空的占位符。

特殊用例的规范:

  • 定义发起方,前提是通用用例规范未对此进行定义。
  • 定义专业化用例所需的任何支持参与者,而通用化用例规范未定义。
  • 通过定义自己的步骤(*),可以覆盖通用用例规范的默认步骤。
  • 通过为那些占位符(**)定义自己的步骤,可以填写通用用例规范的空白占位符。
  • 可能会删除通用用例规范的步骤。
  • 可以添加自己的步骤,而这些步骤在通用用例的规范(***)中都没有预期。

(*) 类似于面向对象示例中的“方法覆盖”模式 [2].
(**) 类似于面向对象示例中的“方法延迟”模式 [2].
(***) 类似于面向对象示例中的“操作添加”模式 [2].

最后,必须编写两个规范,以便将它们组合在一起时,结果就代表了专业用例的完整规范。

这两个规范始终是“文本组合”的,类似于基本用例规范中“包含在文本中”的一些用例规范,如 [3][4].

面向对象的用例实现

通过这种方式指定用例步骤,可以预示所涉及用例的面向对象的实现,其中用例的步骤映射到对基础类的操作。 
  • 就像为泛化和专业化用例定义步骤一样,可以在泛化和专业化类上定义操作,如面向对象示例中的示例所示。 [2].

通用舞会森林

又是什么舞会森林?

According to 16.3.2 (iii)in [1],一个UseCase具有:

  1. “拥有者分类器”。 这是UseCase是其“拥有成员”的“名称空间”。  It is the unique location in a model where the UseCase is defined (iv).
  2. 零个或多个“主题”。 这些是UseCase应用于的分类器(对于给定的“主题”,UseCase“指定受试者可以执行的某些行为[…]”)。

第16.3.2节 [1] 指出“拥有的分类器通常代表拥有的用例所适用的主题”,但补充说“不一定是这种情况。”

  • 由于分类器(因此是UseCase)可以是PackageableElement,而PackageableElement由Package直接拥有,因此UseCase的“拥有分类器”可以是Package。
  • 显然,用例不代表Package可以执行的行为,因为Package只是“用于对[model]元素进行分组,并为分组的[model]元素提供名称空间”。

因此,如果UseCase的“拥有者分类器”是程序包,则UseCase的“主题”定义适用于UseCase的舞会森林(或其“主题”定义舞会森林)。 但是为什么会有多个主题?

  • 虽然 [1] 似乎没有完全声明,我怀疑这是为了支持UseCase重用。

无论如何,UseCase都会“指定[舞会森林]可以执行的某些行为[…]”,其中“舞会森林”是UseCase的“拥有者分类器”或UseCase的“主题”之一(如果“ owning分类器”是一袋)。 本文的其余部分使用笼统的术语“舞会森林”,涵盖了两种选择。

截面基准

本节的内容基于以下声明。
  • 用例是对“舞会森林”的操作,而对类是一个操作。
  • “分类器行为”在用例中就是“方法”在操作中。

UML元模型摘要

这些语句基于下图,该图总结了以下内容的类和关联 [1] 这些点至关重要。  该图显示了分类器(“舞会森林”)的模式及其用例如何反映类及其操作的模式,以及UseCase的模式及其“分类器行为”如何反映操作及其“方法”的模式'。

MVGAug6th-2

分类器图

由于上述原因,并且使用默认的分类符表示法(7.3.8),我们可以在“分类器图”中显示分类器(“舞会森林”)及其用例,如下图所示,类似于我们如何显示类及其操作在一个类图中 [2].

想象一下一家拥有两个品牌分销渠道以及每个渠道都有一个网站的消费电子零售商。 在下图中,抽象渠道网站舞会森林表示具体渠道网站舞会森林的共同点(v)。

MVGAug6th-3

理由

我不记得在其他地方读过关于舞会森林层次结构的文章,但是由于以下原因,它使我觉得是有效的。

  1. UseCase的“舞会森林”是分类器,因此是具体的或抽象的(7.3.8)。
  2. 由于它们是分类器,因此可以使用归纳关系(7.3.8)将“舞会森林”排列为层次结构。
  3. 由于UseCase对于“舞会森林”而言,就像操作对类一样,因此UseCase可以显示在“舞会森林”的“用例区”中,类似于在Class操作区中显示操作( 7.3.8)。
  4. 因为UseCase也是“在分类器的上下文中定义”的RedefinableElement的一种类型(7.3.47),所以可以“在专门(直接或间接)上下文分类器的另一个分类器的上下文中更具体地或不同地重新定义它。 ” 换句话说,可以通过子“舞会森林”来重新定义超级“舞会森林”的UseCase,类似于如何通过子类来重新定义超级类的“操作”(也是RedefinableElement的类型)。

类型对应

与类层次结构一样,对于舞会森林层次结构,必须确保类型对应。
  • 在这种情况下,“红色频道网站是频道网站的一种”和“蓝色频道网站是频道网站的一种”这样的陈述是正确的,因此舞会森林层次结构是适当的。

类图和方法规范

基于先前的类图,下图说明了范围:
  • 类图。
  • 我称之为“方法规范”。

MVGAug6th-4

用例图和用例规范

下图以类似的方式说明了范围:
  • 用例图。
  • 我习惯上将其称为“用例规范”。

MVGAug6th-5

注意:

  • 由于先前的图表中没有演员,因此也没有。但是,如果适用,参与者是这两个范围的一部分。
  • [1] 指定操作和行为都指定前提条件和后置条件,它不对UseCase进行这样的声明,这就是为什么这些条件在上图中的方括号中的原因。 
  • 但是,考虑到UseCase与Operation的比较,我们有理由期望UseCase也指定前提条件和后置条件。 
  • 实际上,这对于UseCase来说是必须的,该UseCase的舞会森林没有为其提供“行为”,而是将其推迟到其子舞会森林(例如,面向对象的示例中的“方法延迟”模式 [2]). 
  • 另请参见第11章中关于超变(超类和子类先决条件)和协变(超类和子类后置条件)的讨论。 [5].

用例参数

使用我在先前文章中提到的用例构造型,用例和参数如下关联。
  • A <<function>> use case (short for ‘application 功能’; initiated by a person) typically has no parameters, because data is exchanged between user 和 system as a use case execution unfolds.
  • A <<service>> use case (initiated by an electronic entity) typically has input 和 output parameters, because that’s the nature of a 服务. 这种用例最类似于类的操作。
  • A <<process>> use case (short for ‘scheduled 处理 ’; initiated by a schedule or time) typically has no parameters, because it knows by design where to get its input 和 where to put its output.

用例重用

舞会森林层次结构允许在舞会森林之间存在类型对应关系的层次结构内重用案例。 将用例分配给多个“主题”可以在没有舞会森林层次结构的情况下重复使用用例,因此舞会森林之间不一定有类型对应。

用例多态

两种重用方法都会导致多态,在这种情况下,不同的舞会森林可以响应请求执行特定用例的相同类型的消息。 

多态范围

给定用例的多态性范围是该用例(直接或间接)适用于的舞会森林集,并且可以是以下之一。
  • 使用舞会森林层次结构时,定义特定用例的顶层舞会森林和继承该特定用例的底层舞会森林形成了 [5] 之所以称为多态的“圆锥”,是因为多态的范围是舞会森林层次结构的倒置树结构(的分支),其形状像圆锥形。
  • 当将用例分配给多个“对象”时,这些舞会森林最终形成了 [5] 之所以将其称为“参差不齐的”多态范围,是因为该范围不一定与舞会森林层次结构的倒置树结构(的分支)相对应,因此不一定形成圆锥形。

实施注意事项

下表总结了本文讨论的层次结构类型,这些层次结构在物理(特定于技术)域中得到直接支持的程度。

由于这些约束不适用于用例模型所属的逻辑(技术中立)领域,因此我们可以毫无保留地在用例模型中使用参与者,用例和舞会森林概括。

MVGAug6th-6

结论

Actor,用例和舞会森林概括(和专门化)是我们可以添加到用例建模工具箱中的特殊工具。 我们可能不会经常使用它们(它们以最不可能使用的顺序列出),但是很高兴知道它们在那里,以防万一我们遇到那些特殊情况,我们需要完成正确的工作。

不要忘记在下面留下您的评论。

 


 

笔记

(一世) 为了尽可能清晰地传达基本信息,该示例故意保持简单,不包括其他旅行组件(例如,巡航),旅行组件束(例如,航班+旅馆)以及使用外部舞会森林(辅助演员)。

(ii) 将启动方与抽象用例相关联是将启动方与每个具体用例相关联的简写形式。 因此,它遵循以下规则:具体用例是具有发起方的用例。 另请参见面向对象示例中的继承的关联 [2].

(iii) 在整篇文章中,由2或3部分组成的数字指的是 [1] (例如13.3.2)和UML角色名称括在单引号中(例如“分类器行为”)。

(iv) 分类器和UseCase之间的所有权关联是命名空间('namespace')和NamedElement('own member')之间的所有权关联的特殊化。 虽然“拥有成员”专门用于“拥有用例”,但没有提供“命名空间”的专门说明。 本文使用“拥有者分类器”作为专门知识, [1] 在全文中使用,但不在正式模型中使用。

(v) “分类器图”引入了术语冲突,因为在这样的图中:

  • 抽象用例是UseCase,舞会森林未为其提供行为,而不是无法实例化的UseCase。
  • 一个具体的用例是舞会森林确实为其提供行为的UseCase,而不是可以实例化的UseCase。
为了避免这种冲突,“分类器图”中的替代术语可以是:
  • “抽象为操作”用例。
  • 一个“具体操作”用例。

参考文献

[1] 对象管理组(OMG),OMG统一建模语言TM值(OMG UML),上层结构,版本2.4.1。

[2] 威廉·范·加伦,通用化和用例​​模型,第1部分,2013年8月12日, http://www.amerkan.com/articles/generalization-and-use-case-models-part-1.html

[3] 威廉·范·加伦(Willem Van Galen),着眼于包含性用例,2012年8月21日, http://www.amerkan.com/articles/putting-the-inclusion-use-case-in-focus.html

[4] 威廉·范·加伦,“包含关系的其他用途”,2013年6月18日, http://www.amerkan.com/articles/the-include-relationships-other-use.html

[5] Meilir Page-Jones,《 UML中的面向对象设计基础》,第四版印刷,2000年9月,Addison-Wesley。

 

威廉·范·加伦

威廉·范·加伦(Willem Van Galen)是退休的高级舞会森林分析师,之前曾在加拿大安大略省伦敦的一家大型金融服务公司任职。 从2008年至2016年,他的职责之一是设计,提供和加强用例建模培训,实践和标准。 在2011年,他增强了这些功能,以反映面向服务的架构和事件驱动的架构。

©BA Times.com 2020

麦格雷戈徽标白色网站