OO关系概论

关系

 

无论是集合与集合间的关系,实体与实体间的关系,类与类间的关系,关系的性质是通过它们里面具体的对象间的关系来体现的。比如说 类间的关系是靠类对象间的关系来体现的。

所以我们看抽象关系,要从具体出发来看,同时又要脱离具体。

关联关系

1:关联关系是基于对象的

2A类和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 继承关系

     去掉抽象的概念,然后从实现的角度来看,我觉得继承关系更像是一种特殊化处理后的强包含使用关系(数据与对外的行为作特殊化处理)

posted @ 2007-11-21 11:41  Jeff Liu  阅读(458)  评论(0)    收藏  举报