OO中类的关系

在OOD时,我们通常要搞清楚,我们的类与类之间的关系。通常有以下几种:

1.继承
继承可能是我们最容易理解的类关系了,它可以用“is a”来描述。通常表现是类和类(抽象类)的继承、接口和接口的继承、以及类对接口的实现。比如我们现在有个抽象类DBMysqlDBSqlliteDB分别使用extends关键字继承DB类,这样不仅MysqlDBSqlliteDB要实现DB类定义好的抽象方法,而且还能继承DB中的已存在的方法。我们可以说MysqlDB是一种DB。这种关系即父子关系,有其父必有其子,但是子可以“青出于蓝而胜于蓝”。注意,其实这包含两种关系,即泛化关系及实现关系,类和类、接口和接口之间是泛化关系,而类和接口只是实现关系了。

2.依赖
两个独立的类,但其中一个类使用另外一个类,比如第二个类产生了第一个类的局部变量,第二个类作为第一个类方法的参数等等。也就是说,第一个类需要第二个类的帮组,第一个类使用了第二个类才能正确工作。比如在MVC模式中,我们的ACTION需要依赖MODEL来操作获取或者更新数据。依赖跟被依赖只是一个使用关系,除此之外,别无其它。

3.关联
两个独立的类,当一个类与另外一个类存在特定的对应关系时,这就是一种关联关系。通常表现为第一个类把第二个类的实例当中自己的一个属性。比如一个博客系统中,一篇博文对应特定的博主,而博主则有一些特定的博文。注意,这两个类直接是处在同一层次上面的。

4.聚合
当类和类直接的关系表现为整体和部分的时候,它可能就是聚合关系了。聚合最主要体现在“聚”字上面。比如学生以及老师聚在一起形成了一个班级。但是,有聚就有散,很可能这个班级过一年就散伙了,但是这些班的全部或者部分老师和学生重新聚在一起形成了另外一个班级。注意,这个班级并不会因为散伙而导致老师或者学生都不存在了。

5.组合
组合是一种更强关系的聚合。组合不仅仅包含全部和整体的关系,而且主体还可以控制另一主体的生命周期。比如人这个主体,他是有头部,身躯和下肢组成的,一旦人没了,头部,身躯和下肢也将不存在了。


各个关系直接的区别
从关系的强弱程度看,依次是依赖 关联 聚合 组合。

依赖和关联的区别:依赖是一种较弱的关联。具体体现在代码上面就是:关联关系中,被关联的类是关联类的属性,而在依赖关系中,被依赖者仅仅是依赖者的局部变量,方法的参数而已。

关联和聚合的区别:聚合有整体和部分的关系,而关联没有,关联中的类是在同一级别上的。

聚合和组合:他们都有整体和部分的关系,但是在组合中,类具有一样的生命周期,即整体类消失了,部分类也就不存在了。

posted @ 2011-05-27 14:15  winxp_520  阅读(637)  评论(0编辑  收藏  举报