1、 关联关系
类A关联类B的意思是,如果实例化一个A类的对象,同时,会有一个B类的对象被实例化。简言之,B作为A的属性存在。如下:
2、 依赖关系
类A依赖类B的意思是,如果A的对象要完成某一操作,必须使用B的对象的某些操作来帮忙,才能完成。简言之,B作为A的某个方法的方法参数存在。如下:
关联和依赖,是面向对象编程中,最常见的两种关系。
3、示例
假设有这样一个场景描述:某培训中心提供免费培训课程,每门课程都有其名字以及原价。学员最多每人可以选择一门课程,学员只要登记姓名,就可以选择一门课程来学习。
通过分析这个简单场景,可以很容易分析出,有两种对象:学员,课程。也就是说,我们应该创建两个类,Student, Course。
Course类有两个属性,课程名称和原始价格。如下:
然后创建另外一个类, Student, 该类有一个学员姓名属性 name ,另外,因为每个学员可以选择一门课程学习,那么就是说, 每个Student对象,会有一个Course对象 ,即 Course应该作为Student的一个属性存在 ,即 Student 关联了 Course 。那么,会有如下声明:
继续分析, Student应该有1 个行为,就是选择课程。要完成选择课程这个操作,必须得接受一个课程的对象,也就是说, Student选课 这个行为,必须 依赖于Course的一个对象 ,才能完成,所以 Student和Course之间还存在依赖关系 ,继续完善上边代码:
很多初学者,对于Course作为Student的一个属性,以及Course类型作为方法参数,作为方法返回值的类型,不能接受。总觉得只有String,int之类才是数据类型,而Course作为一个类型存在,有些不伦不类。Java是面向对象的语言,任何一个类,就是一个类型,都可以作为数据类型存在,我们自己声明的类也不例外。也就是说,如果能理解String作为一个类型存在,就应该坦然接受Course作为一个类型存在,因为它们是一样的,都是一个类型而已,只不过String是API中声明的,Course是我们自己声明的。
学习本文内容后,初学者应该又上了一个台阶,就是不再仅仅关注某个Java类的语法,而是从更高的角度去看待Java应用,去关注类与类的关系。
总结一下关联和依赖关系:
1、 关联和依赖都是面向对象编程中,常用的关系。
2、 关联表示has-a关系,如学生拥有一个课程,往往表现为B作为A的属性存在(A关联B)
3、 依赖表示要做一件事情,离不开某个对象。往往表现为B作为A的方法参数存在(A依赖B)
4、 当开始了解类与类的关系后,就需要对类型有更深入的了解。切记,任何类都可以作为类型使用。
在本文例子中,学生只能选择一门免费课程学习,如果培训中心加大优惠力度,每个学生最多可以选择3门课程学习,应该如何维护这种关系哪?我们就不得不去了解Java语言中的一些“数据容器”对象:数组、集合。