7.7 Dependencies
7.7.1 概要
依赖(Dependency)在模型元素直接指示了一种提供者/客户关系,其中对提供者的修改可能会影响客户模型元素。
7.7.2 抽象语法
图7.17 Abstract syntax of dependencies
7.7.3 语义
Dependency
依赖暗示如果没有供应者(suppliers),那么客户(clients)的语义是不完整的。模型中依赖关系的存在没有任何运行时语义暗示。依赖关系的语义是通过参与该关系的NamedElements给定的,而非它们的实例。
Usage
Usage是一种依赖,其中,一个NamedElement需要另一个NamedElement(或一组NamedElements)才能完成自己的全部操作。Usage除了指明在客户的实现或定义中需要使用提供者外,没有指明客户如何使用提供者。
Abstraction
Abstraction是一种依赖,它关联两个NamedElements或一组NamedElements,这些元素在不同的抽象层次或不同的视角都代表相同的概念。该关系可以被定义为提供者和客户直接的一个映射。依据特定类型的抽象,该映射可以是形式化的或非形式化的,可能是单向的或双向的。Abstraction有预定义的stereotypes(例如«Derive», «Refine», and «Trace»),它们定义在标准的Profile中(参见第22章)。如果一个Abstraction具有多个客户,那么提供者以一个组(群体)的形式映射到客户集合。举个例子,一个分析层的类可能被划分为多个设计层的类。如果有多个提供者,情形也是类型的。
Realization
Realization是两组NamedElements之间的一个特定的抽象依赖,一组代表一个规约(提供者),另一组代表规约的实现(客户)。Realization可以被用于模型逐步精化、优化、转换、模板、模型合成、框架合成等等。Realization意味着客户集合是提供者(作为规约)集合的一个实现。此处“实现”的意思没有被严格定义,但是应当在一定的建模上下文中体现出一个更为精化的形式。可以在规约和实现元素之间指定一个映射,尽管这未必是可计算的。
7.7.4 表示法
依赖表示为两个模型元素直接的一条虚线箭头。箭头尾部的模型元素(客户)依赖箭头所指的模型元素(提供者)。箭头可以用一个可选的关键字或stereotype和一个可选的名字进行标注(参见图7.18)。
图7.18 Notation for a Dependency between two elements
依赖中的客户或提供者可能是一组元素,此种情况下,一个或多个尾部在客户的箭头连接到一个或多个头部在提供者的箭头的尾部。如果需要的话可以在连接处放置一个小点。依赖应该在连接点处附加一个便签。
Usage表示为附加一个«use»关键字的依赖。
Abstraction表示为附加一个«abstraction»关键字或特定预定义的stereotype的依赖。
Realization表示为一个带有三角箭头的虚线,箭头指向被实现的元素。
7.7.5 示例
图7.19中,CarFactory类有一个对Car类的依赖。此种情况下,该依赖是一个Usage,它应用了标注的«Instantiate» stereotype,指示CarFactory类的实例创建Car类的实例。
图7.19 An example of an «Instantiate» Dependency
图7.20中Order类需要Line Item类来实现自己的全部实现。
图7.20 An example of a «use» Dependency
图7.21展示了Business类被Owner和Employee类的组合(注意. 不是分别实现)所实现。
图7.21 An example of a realization Dependency