Inheritance 什么';UML中原型和类继承之间的区别是什么?

Inheritance 什么';UML中原型和类继承之间的区别是什么?,inheritance,uml,stereotype,Inheritance,Uml,Stereotype,我对UML中的“原型”和“超类”之间的区别感到困惑 假设我想创建一个涉及“WidgetMaker”的图表,WidgetMaker显然是一个Actor,因此UML标准是对它进行原型化: <<Actor>> WidgetMaker 所以我的问题是:当您可以使用类继承(它也有类继承)同样轻松地建模这些概念时,为什么UML有原型呢 一旦我们有了更多“种类”的演员,问题就变得更加模糊了: Actor ^

我对UML中的“原型”和“超类”之间的区别感到困惑

假设我想创建一个涉及“
WidgetMaker
”的图表,
WidgetMaker
显然是一个
Actor
,因此UML标准是对它进行原型化:

<<Actor>> WidgetMaker
所以我的问题是:当您可以使用类继承(它也有类继承)同样轻松地建模这些概念时,为什么UML有原型呢

一旦我们有了更多“种类”的演员,问题就变得更加模糊了:

              Actor
                ^
                |
    ------------------------
    |           |          |
  Person      Robot      Group
    ^
    |
WidgetMaker

<<Actor>> <<Person>> WidgetMaker
WidgetMaker

存在一个原型,用于提供有关工件的更多信息,而文档或将其分类到特定工件块中可能不会给出这些信息。例如,您已经识别了一个数据类,您可以给它命名,解释属性和操作,但它本身可能不会给出完整的信息;在此之前,它将继续作为开发人员的任何其他类

原型用于扩展UML符号元素,分类和扩展关联、继承关系、类和组件


原型提供了创建新类型的建模元素的能力。原型必须基于作为UML元模型一部分的元素。类的一些常见原型是实体、边界、控件、实用程序和异常。一个类的原型显示在guillemets中包含的类名下面(即
«
»
,发音为gee-may)。如果需要,图形图标或特定颜色可能与原型相关联

据我所知,原型的主要目的是支持UML本身的扩展(作为建模语言),而不是建模任何东西

话虽如此,我也认为你的问题暗示了另一个可能的有效答案:有些人更喜欢使用刻板印象来(非正式地!)指出类之间的某些共性。他们这样做可能只是因为它比子类化容易,并且对于他们的模型来说“足够好”


例如,许多软件系统都有表示所谓的域实体(如公司、客户、采购订单、产品等)的类。最后,可能希望有一个像
实体
这样的公共类来派生
公司
客户
等。但一开始,仅仅使用诸如
公司
客户
等定型类就足够了。本质上,这只是建模工作的一个方便(和成本/收益!)。在您的示例中,Actor可能不需要作为类实现,但情况可能总是如此,也可能并非总是如此。原型是可以应用于大多数UML元素而不仅仅是类的抽象

它们封装了语义,但没有暗示如何提供这些语义。另一个例子可能是一个被定型为HTTP或RPC的通信通道。他们正在与读者交流如何提供一些东西,而不必用不必要的细节使模型复杂化


UML规范提供了许多预定义的原型,但它们真正的力量来自于能够通过概要文件定义自己的原型。您可以将一个域对象标记为EJB,以节省您指定所有锅炉板代码的时间。

从OMG如何在SysML或BPMN配置文件中应用原型可以看出原型背后的意图。具体来说,原型描述了一组新的建模构造,作为指定域的语言的一部分。例如,SysML中的一个块是应用于类的原型。它带来了在系统工程中使用的类的定制。在这种情况下,它取代了类的使用,并建立了与其他元素和图表类型的新关系,例如Block>Requirement(允许的关系),或者可以使用内部框图(允许的行为)对一个块进行建模。 刻板印象不是用来为你的主题空间建模的。它将建模构造用于系统定义的垂直或水平方面进行分类。

根据 如果您想要有标记的值,您需要将它们定义为原型上的属性(因为UML2.0是必需的)

在UML1.3中,标记值可以扩展模型元素,而不需要存在原型。在UML1.4中,虽然仍然支持此功能,但不推荐使用,仅用于向后兼容的原因

自UML2.0以来,标记值只能表示为原型上定义的属性。因此,模型元素必须由原型扩展,才能由标记值扩展。为了支持与UML1.3的兼容性,一些UML工具可以自动定义一个原型,将“未附加”属性(标记值)附加到该原型

标记值可以显示在类隔间的原型名称下。对于每个要显示其值的应用原型,需要一个额外的隔间。每个这样的隔间都以guillemets中应用的原型的名称为首

2003年关于刻板印象的有趣读物可能是

这是摘要:

作为UML的主要扩展机制之一,原型在UML为广泛且不断增长的用户群提供服务的能力中起着至关重要的作用。然而,陈规定型观念及其预期使用方式的确切含义从未完全清楚,甚至在专家中引起了重大辩论。在实践中观察到了使用UML原型的两种基本方式:一种是支持类的分类,作为模拟元模型扩展的一种手段;另一种是支持对象的分类,作为为对象分配特定属性的一种手段
              Actor
                ^
                |
    ------------------------
    |           |          |
  Person      Robot      Group
    ^
    |
WidgetMaker
<<Actor>> <<Person>> WidgetMaker