【依赖dependency】
两个元素间出现依赖,如果一个元素(供应者supplier)的定义的改变 会引起另外一个元素(客户)的改变。
类间的依赖多种:一个类发送消息给另一个;一个类作为另一个类的数据;一个类作为另一个的某个操作的参数。
如果依赖超出控制,一个系统的每个改变都会有很大影响导致更多的改变。这样就很难做改变。
uml允许你描述所有元素种类间的依赖。当你想显示一个元素改变之后可能怎样改变其他元素时可用依赖。
例子(当Employee改变的时候,Window可能需要改变):
Benefits Window - - > Employee - - > Employee Data Gateway
- - > Benefits Data Gateway
我发现严格的分开展示presentation和业务逻辑domain logic,让展示依赖业务而不反过来 这样很有价值。
另外就是Window没有直接依赖Data Gateway,若这些类改变了,Employee可能会改变。但若改变只影响Employee的实现implementation,而不是接口interface,则改变停在那里。
基本的依赖是不可传递的transitive。某些类型的依赖,比如替代substitute是可传递的。但大多数例子中,在有向和无向依赖间有一个重要的区别。
一个子类依赖父类,但不反过来。
可选的依赖关键字:
callsrc calls an operation in the targ
createsrc creates instances of the targ
derivesrc is derived from the targ
instantiatesrc is an instance of the targ
permittarg allows the src to access the targ‘s private features
realizesrc is an implementation of a specification or interface defined by the targ
refinerefinement indicates a relationship between different semantic levels
比如src可能是一个设计类,而targ是相应的分析类analysis class
substitutesrc is substitutable for the targ
traceused to track such things as requirements to classes or how changes in one model
link to changes elsewhere
usesrc requires the targ for its implementation
【限制规则constraint rule】
uml允许用任何东西来描述限制,唯一的规则是你要把他放到{}里。例子:
{disallow incest: husband and wife must not be siblings}