静态视图
静态视图对应用领域中的概念以及与系统实现有关的内部概念进行建模.
在OOP中,使用Class(广义的)来完成这些任务,所以,类和类的关系组成了静态视图.其亦称为类图.
核心:捕捉对象的结构.
- 关联(asscociation):描述对象之间的链(关系).
- 同一类的不同对象之间可以有关联,称为自反关联.
- 多重性:一个类的多少个实例和另一端的类的实例相连.当多重性大于1时,可以指定关联值得排序和唯一性等说明.
- 关联类:即时类又是关联的类.
- 如果关联类的属性在一组关联对象中是唯一的,那么该属性称为限定符,这种关联称为限定关联(表和数组).
- 限定符:对索引进行建模.用以从一组关联对象中标示出唯一对象的值.
- 分析阶段:关联表示对象间的逻辑关系.没必要指定方向或者关心如何实现.此时应避免多余的关联(不会增加逻辑信息).
- 设计阶段:关联捕获数据结构的设计决策和类之间职责分离.此时方向性很重要.也可以引入一些多余关联.
- 聚合(aggregation):部分和整体的关联(虚心菱形).
- 组合(composition):更强的聚合(实心菱形).整体有管理部分的完全职责.
- 链:关联的一个实例.对象引用(关联中类的实例)的一个有序列表.链从其所关联的对象中得到自己的标示(DB中的Key).
- 双向性:关联的两端是可区分的,不对称的,不可交换的.所以双向性意味着在两个方向上都有逻辑关系.但是并不意味着每个类都知道另一个类(就像元素不知道容器一样).箭头方向可以标记之.
- 使用模型对象来反映具体实现背后的意图.而不使用program language中的指针来表示关联.
- 实际Coding中,关联可以使用指针,被嵌套类,或者完全独立的表对象来实现.
- 泛化(inheritance):指一般描述和具体描述的分类关系.
- 实现了多态和继承.
- 多重继承会带来声明冲突问题(从不同的基类中继承了相同的声明).
- 实现:类似于泛化.
- 泛化链接同一语义层面上处于同一模型内的元素;实现将不同语义层面上的不同模型内的元素相链接.
- 典型场景是我们的的接口定义在一个DLL内,而实现在另一个DLL里.
- 依赖(dependency):N个元素间语义上的关系.
- 只是将元素本身链接起来而不需要一组实例来表达意义.
- 表示了提供者元素的某些变化会要求或预示以依赖关系中客户元素含义的变化.
- access(package引入),bind(templete实例参数),call,create,derive,instantiate,permit,realize,refine(不同语义层次上元素间的映射),send,substiute(替代),trace(不同模型中元素间的不精确映射),use.
总结.类图是用来描述元素间的依赖关系的.根据特定的关系类型,细分出来了关联,泛化和实现这些具体依赖类型.
设计过程就是细化和重组依赖关系的过程.
分层减少了具体实现间的依赖关系,从而实现了DIP.