UML:依赖关系

依赖关系是一种有向关系,用于表示一些UML元素或一组元素需要、需要或依赖于其他模型元素来进行规范或实现。因此,依赖关系被称为供应商-客户关系,在这种关系中,供应商向客户提供某些东西,因此客户在某种意义上是不完整的,同时在语义或结构上依赖于供应商元素。供应商的变更可能会影响客户元素。

依赖关系是命名元素之间的关系,在UML中它包括许多不同的元素,例如类、接口、组件、工件、包等等。下图显示了几种依赖关系。

依赖关系概述图 - 使用,抽象,部署。

用法是一种依赖关系,其中一个命名元素(客户端)需要另一个命名元素(供应商)来完成其完整定义或实现。

述抽象 涉及表示同一概念的两个元件,但在不同的抽象层次。

部署是显示工件分配(部署)到部署目标的依赖。(不太清楚为什么UML 2.4.1将部署定义为一种依赖,而不是一种关联,或者仅仅是一种有向关系。)

注意,UML2.4.1规范有一些令人困惑的澄清,“模型中的依赖关系的存在不具有任何运行时语义含义,它都是根据参与关系的模型元素给出的,而不是根据它们的实例。”

这一澄清与使用依赖(即实现依赖)的定义相矛盾。经验丰富的软件开发人员知道在运行时缺少某些依赖关系时会发生什么情况,应用程序会被类加载器中的LinkageError或ClassNotFoundException杀死。因此依赖性实际上可能有一些严重的运行时语义含义。

依赖关系通常显示为从箭头的客户端(从属)指向箭头处的供应商(提供商)的虚线箭头。箭头可以标有可选的原型和可选名称。因为箭头的方向与我们通常期望的方向相反,我通常将其定型为client《depends on》supplier.

Class SearchController取决于(需要)SiteSearch界面。

多年来,UML规范提供了如下所示的依赖关系的矛盾示例。UML 2.4.1规范的图7.38的解释是:“在下面的例子中,Car类依赖于CarFactory类。在这种情况下,依赖关系是一个实例化的依赖关系,Car类是CarFactory类的一个实例。”

错误示例:Car类依赖于CarFactory类。
正确:CarFactory类取决于Car类。

这个例子实际上显示了与UML规范相反的情况。。CarFactory取决于Car类。carfactory类可以在不知道carfactory类的情况下定义,但是carfactory需要car来定义它,因为它生产汽车。这样说也是错误的”...汽车类是汽车工厂类的一个实例。”Car类由CarFactory类实例化。

可以为客户或供应商提供一组元素。在这种情况下,一个或多个箭头的尾部在客户身上,连接到一个或多个箭头的尾部,箭头的头部在供应商。如果需要的话,可以在交叉点上放置一个小点。在连接点处应附上有关依赖关系的说明。

依赖关系可用于几种UML图:

  • 类图
  • 复合结构图
  • 包装图
  • 组件图
  • 部署图

以下是一些依赖关系的例子

网络购物套餐使用(取决于)付款套餐。

SiteSearch 接口由SearchService 实现(实现)。

注意,抽象依赖关系有一个约定,将更抽象的元素作为供应商,将更具体的或实现元素作为客户,但是UML规范也允许以相反的方式来描述它。

组件userservice由userservlet和userdao实现。

使用(Usage)

依赖关系是一种使用关系,其中一个元素(客户端)需要另一个元素(或一组元素)(供应商)来实现或操作。

除了客户的定义或实现使用供应商这一事实之外,使用相关性并未指定客户如何使用供应商。例如,这可能意味着(客户端)类中的某些方法使用另一(供应商)类的对象(例如参数)。

SearchController类使用 SearchEngine类。

创建(Create)

Create是使用依赖关系, 表示客户端分类器创建供应商分类器的实例。它用标准的构造型《create》表示。

DataSource类创建Connection。

Create还可以指定指定的 特征 创建该特征附加到的分类器的实例。该依赖性可以被提升到包含特征的分类器。

Create可以将实例值与类的构造函数相关联,描述构造函数操作返回的单个值。操作是客户,创建的实例是供应商。实例值可以引用该操作声明的参数。

帐户构造函数创建帐户的新实例

nstantiate是分类器之间的另一个使用依赖关系,表示客户端上的操作创建了供应商的实例。它用标准构造型《instantiate》表示。

尚不清楚为什么UML 2.4标准同时具有 “创建”和“实例化”功能。

调用(Call)

Call是一种使用依赖关系,它指定源操作调用目标操作。这种依赖性可以将源操作连接到范围内的任何目标操作,包括但不限于封闭分类器的操作和其他可见分类器的操作。

Call用标准原型调用表示,它的源是一个操作,目标也是一个操作。

这种关系也可以应用于包含操作的类,这意味着在依赖关系应用的类中存在操作。

发送(send)

send是一种使用依赖关系,其源是信号发送者,目标是信号,指定源发送目标信号。

发送用标准原型发送来表示。

Send用标准构造型《send》表示。

需求接口(Required Interface)

Required的接口指定分类器需要的服务,以便执行其功能并履行其对客户端的义务。它由分类器和相应接口之间的使用依赖关系来指定。

从分类器到接口 的使用依赖性通过用半圆或套接字表示接口来显示,该半圆或套接字用实线附加到需要此接口的分类器上,并标有接口名称。

SearchController 使用(必需)SiteSearch 接口。

如果使用矩形表示法表示接口,则接口使用 依赖性由依赖性箭头表示。箭头尾部的分类器 使用(需要)箭头头的界面。

SearchController 使用(必需) SiteSearch接口。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章