OO关系概论
关系
无论是集合与集合间的关系,实体与实体间的关系,类与类间的关系,关系的性质是通过它们里面具体的对象间的关系来体现的。比如说 类间的关系是靠类对象间的关系来体现的。
所以我们看抽象关系,要从具体出发来看,同时又要脱离具体。
关联关系

1:关联关系是基于对象的
2:A类和B类有联系,但又不是继承关系,使用依赖关系,也是不是包含关系,是除里它们之外的一种联系关系。
3:关联关系的种类
(1)它是几元关系?
(2)是单向的,还是双向的?导航性
(3)几对几,是强制还是可选。判断的方法是看类里面的对象的关系。
4:从实现的角度来看这种关系
方式1:通过属性来关联
(1) 通过对象的引用属性来指向关联
(2)通过一个标示属性来导向,比如用姓名的字串来标示这个人对象
方式2:通过第三方类来关联 适合在多对多的关联
包含关系——聚合关系(弱包含关系)组合关系(强包含关系)

1:包含关系也是一种基于对象的关系
2:包含关系有时就意味者“使用依赖关系”,包含它而去使用它。有些除外比如“容器类”
3:判断强弱包含的方法---被包含的对象如果从包含对象中移除,包含对象的行为会改变吗?
4:聚合关系(弱的包含关系)如教师—学生;停车厂—轿车
组合关系(强的包含关系)如鸟—翅膀;车—引擎
说明:组合关系中的部分的生命周期与整体相同,在一个Context中,一个部分对象只属于一个整体对象。而对于聚合关系,我创建的一个部分对象可以同时属于许多的整体对象
5:什么时候用强包含?什么时候用弱包含?包含关系中的使用vs使用依赖关系中的使用?
以A类的对象包含使用B类为例,聚合关系中的包含使用和使用关系中的包含使用中,B在A的外部环境中也可以被使用,B是可以共享的,比如一个工具类,
它的状态的改变不会影响到包含类A的状态和行为,也就是说我们关注的是B的行为。
但是对与组合关系中包含使用,Bl类的对象在外部环境中是不能使用的,且在这个上下文环境中只存在一个,也就是属于A,因为B强包含于A,A的状态与行为是依赖B的状态的。
**到底是选用弱包含使用,还是强包含使用,就是要看,被包含的对象的状态会不会影响到包含对象的状态和行为。状态与行为是有关的。
6:从实现的角度来看
方式1:值包含
方式2:引用包含
使用关系 或 依赖关系

1:使用依赖关系是基于对象的,也就是说如果两个类有使用依赖的关系,并不是类里面的所有对象都要有使用依赖关系。
2:如果A类里面的某个对象向另B类的某个对象发送了消息,那么我们 就说,A类使用了B类,A类依赖B类 (这里我们也可以看出关系是通过里面的对象的关系来体现 的)
3:这种关系是通过行为来关联的,对于集合,E-R中一般都没有这种关系
4:我们从实现的角度来看这种关系 【关键就A的对象如何找到B的对象】
方式1:包含使用 ——B的对象是A的对象的一个字段属性,显然A的对象能找到B的对象并发送消息给它
方式2:消息参数——如 A.方法(B对象,MESSAGE)
方式3:第三方的类对象——通过第三方的类对象找到B的对象,然后向B的对象发送消息
方式4:通过全局变量——显然这类似一种隐式的参数,B的对象是全局的,A的对象显然可以知道B的对象,从而向B对象发送消息
方式5:在A的对象的方法的内创建B的对象,然后给B的对象发送消息,最后撤销B的对象。
泛化与实现

1:继承关系是一种基于类的关系,也就是类的所有对象都有这种关系。
2:数据加行为
3:强包含使用 vs 继承关系
去掉抽象的概念,然后从实现的角度来看,我觉得继承关系更像是一种特殊化处理后的强包含使用关系(数据与对外的行为作特殊化处理)

浙公网安备 33010602011771号