【问题标题】:"Create" vs "Instantiate" dependency in UMLUML 中的“创建”与“实例化”依赖关系
【发布时间】:2015-10-17 23:37:47
【问题描述】:

根据 UML 规范,我们可以通过 <<Create>><<Instantiate>> 构造型来表示两个类之间的依赖关系。

你知道这些刻板印象之间有什么区别吗?

它是用 UML 规范 2.5(第 22.3 章标准刻板印象)编写的:

  1. 对于<<Create>>

    表示客户端分类器创建的使用依赖关系 供应商分类的实例

  2. 对于<<Instantiate>>

    分类器之间的使用依赖关系表明对 客户创建供应商实例

【问题讨论】:

  • 我不会把所有的 UML 定义放在一个黄金天平上。对我来说,这两个定义听起来非常相似。据我了解,> 类似于(上帝的)创造,所以是新的东西。相比之下,>更像是一个克隆操作。 YMMV

标签: uml


【解决方案1】:

迈克尔·杰西·乔诺尔斯 是的,«create» 用于序列图。这是对消息的刻板印象。 «Create» 也是分类器中行为特征的刻板印象,表明它是该分类器实例的构造函数(或非面向对象项目的等价物)。

当对依赖项使用“Create”时,它似乎与“Instantiate”没有太大区别。就个人而言,我使用依赖项«Instantiate»。当我的意思是通过调用构造函数(这是我将模型转换为代码的方式)实现的真正面向对象的实例化时。当它是一种不同类型的创建时,我会使用 «Create»,无论是更间接的、概念性的还是非面向对象的功能。

这里有一些例子。我会用 «Create» 来表示 MSWord-->«Create» 一个文档,一个建模器 «Create» 一个模型。虽然我通常不会对此进行详细建模,但我会使用 «Create» 表示组件«Create» 一个新的数据库记录,数据库管理器«Create» 一个新数据库,一个程序员«Create» 一个新应用程序。或者在(非 oo)数组中创建一个新元素。这些可以在不直接调用传统的面向对象的构造函数的情况下发生——并且不能直接转换为代码。

另一方面,如果我对一个人进行婚姻操作,它可能会“实例化”婚姻的关联类对象。

因为我的大部分建模都是概念性的,所以在实践中,我倾向于使用«create»。不过,即便如此,它也不会经常出现。

【讨论】:

    【解决方案2】:

    我注意到 > 构造型不仅可以应用于“使用”依赖,还可以应用于 “BehavioralFeature”(参见 UML 规范中的第 22.2 节)。

    在 UML 中,“BehavioralFeature”对应于类或接口中的特定方法。

    因此,如果我们用 > 或 > 标记类中的特定方法 我们的意思是它创建/销毁这个类的一个实例。

    我们可以在使用 > 标记方法之间进行比较 并使用 >.

    标记使用依赖关系

    如果我们用 > 标记使用依赖,那么 这意味着客户端类中的特定方法会创建供应商类的实例。 因此,我们在客户类的主体中创建了一个供应商实例。 客户和供应商在这里是强耦合的。

    另一方面,如果我们用 > 标记使用依赖,那么 客户端类将供应商的创建委托给其他对象。 因此,他间接创建了供应商。 在这种情况下,客户和供应商松散耦合。 例如,如果我们通过以下创建模式之一创建供应商,就会发生这种情况:对象池、原型、工厂方法等。

    注意:

    总的来说,与规范的区别不是很清楚。 希望在它的未来版本(超过 2.5 版本)中我们有更清晰的定义。

    【讨论】:

    • 这是你对这些事情的解释还是你有证实这种观点的来源?
    • 这是我自己根据UML规范分析的
    【解决方案3】:

    在 SyML/UML 方面指导我的人已经在大型公司从事 SyML/UML 方面的 MSBE 多年。

    我问他如何画一个图表,显示:

    “系统启动进程”加载(从 ROM)并运行“系统主进程/应用程序”。

    他说我应该使用«Create»使用依赖。

    如我所见:

    • 您使用 «Create» 来表明一个进程运行“大”的东西 - 比如 启动整个外部进程/软件项/应用程序。

    • 您使用 «Instantiate» 来表明在给定进程中,代码 段实例化从一个类“创建”一个对象实例 定义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-10
      • 2014-06-11
      • 1970-01-01
      • 1970-01-01
      • 2020-06-13
      相关资源
      最近更新 更多