目录
一、UML类图的6种关系(依赖关系由弱到强):
二、6种关系归纳总结
2.1 第一种归纳方式:先分组,再分组(由大到小,由宏观到微观)
2.2 第二种归纳方式:先聚合,再聚合(找共同点,逐步抽象,由微观到宏观)
2.2.1 归纳到一起其实是2种关系:依赖和关联。
2.2.2 寻根究底再归纳
2.2.1 为什么最终是两个关系呢?这两个关系是什么关系?
2.2.2 那么继续,为什么依赖的关系弱于关联的关系呢?
2.3 从根上往上推关系是如何扩展来的?如下图所示:
三、uml类图的六大关系进行结构化(通过对比它们的强弱):
3.1 维度1、改变难易程度定强弱
3.2 维度2、线型断强弱。
还有没有其他维度呢?
一、UML类图的6种关系(依赖关系由弱到强):
关系 | 线型 | 关键代码 |
依赖 | todo: | |
关联 | todo: | |
聚合 | todo: | |
组合 | todo: | |
实现 |
| |
继承 |
|
二、6种关系归纳总结
2.1 第一种归纳方式:先分组,再分组(由大到小,由宏观到微观)
所有的叶子节点组成6大关系。
2.2 第二种归纳方式:先聚合,再聚合(找共同点,逐步抽象,由微观到宏观)
2.2.1 归纳到一起其实是2种关系:依赖和关联。
1、首先我们这样组合看这6种关系:
依赖、(关联、聚合、组合、)实现、继承
首先聚合和组合都属于关联关系的1对多扩展,所以合并为关联。
2、现在剩下:
依赖、关联、实现、继承
一般看的时候是这样的一个组合关系:
(依赖、关联、)(实现、继承)
我们把它们拆开打乱重新组合看,或许看到不一样的内容,比如:
(依赖、实现、)(关联、继承)
分析:
依赖是不同血缘关系的类在方法级别产生关系。
关联是不同血缘关系的类在类级别产生关系。
实现是相同血缘关系的类(接口)在方法级别,也就是行为级别产生关系。
继承是相同血缘关系的类在类级别产生关系。
那么:
依赖和实现都是方法级别,行为级别的合并到一起。可以都说是依赖。
关联和继承都是类级别的,合并到一起。可以都说是关联。
结论:
所以最终归纳为2种关系:依赖和关联。从线型上也可以进行如此归纳。
2.2.2 寻根究底再归纳
2.2.1 为什么最终是两个关系呢?这两个关系是什么关系?
再归纳就是归纳为类只有两部分内容:1、属性;2、方法。所以类的关系也就从这两部分衍生出来。
一个类的方法在另一个类的方法中出现,则是依赖。
一个类在另一个类的属性中出现,则是关联。
区分一种情况,如果是透传,则不属于有依赖关系。
只在方法里new对象,不调用该对象的方法,也不属于有依赖关系。
因为他们的行为没有产生交互。也就是方法内没有直接调用方法。
2.2.2 那么继续,为什么依赖的关系弱于关联的关系呢?
从类的组成(方法和属性)的角度分析:?
从对象的组成(行为和特征)的角度分析:?
从动静(类和对象)的角度分析:?
依赖和关联,描述的是类之间的关系还是对象之间的关系呢?
说是类之间的关系,那么只考虑类,不考虑对象,不用考虑运行时。
根据变化的容易程度吗?
强弱是个相对的,软硬也是相对的,更软更易改变,更硬更不易改变。
那么关系更强更不易改变,关系更弱更易改变。
依赖发生在方法里,关联发生在属性上。相对来说方法更容易改变?是的。
还有其他角度吗?
2.3 从根上往上推关系是如何扩展来的?如下图所示:
三、uml类图的六大关系进行结构化(通过对比它们的强弱):
3.1 维度1、改变难易程度定强弱
方法关系比属性关系更弱,无血缘关系比有血缘关系弱,关联类单个比多个弱,关联越晚发生越弱。
3.2 维度2、线型断强弱。
虚线比实线关系弱,空心比实心关系弱,没菱形比有菱形关系弱,普通箭头比三角箭头关系弱。