关联关系和依赖关系

1、  关联关系

类A关联类B的意思是,如果实例化一个A类的对象,同时,会有一个B类的对象被实例化。简言之,B作为A的属性存在。如下:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. class A{  
  2.        private B b;  
  3. }  
  4. class B{  
  5.    
  6. }  

2、  依赖关系

类A依赖类B的意思是,如果A的对象要完成某一操作,必须使用B的对象的某些操作来帮忙,才能完成。简言之,B作为A的某个方法的方法参数存在。如下:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. class A{  
  2.        public void f(B b){  
  3.    
  4. }  
  5. }  
  6. class B{  
  7.    
  8. }  

关联和依赖,是面向对象编程中,最常见的两种关系。

3、示例

假设有这样一个场景描述:某培训中心提供免费培训课程,每门课程都有其名字以及原价。学员最多每人可以选择一门课程,学员只要登记姓名,就可以选择一门课程来学习。

       通过分析这个简单场景,可以很容易分析出,有两种对象:学员,课程。也就是说,我们应该创建两个类,Student,    Course。

       Course类有两个属性,课程名称和原始价格。如下:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public class Course {  
  2.        private String title;  
  3.        private double price;  
  4.        public Course(String title, double price) {  
  5.               super();  
  6.               this.title = title;  
  7.               this.price = price;  
  8.        }  
  9.        public Course(String title) {  
  10.               super();  
  11.               this.title = title;  
  12.        }  
  13.        public Course() {  
  14.               super();  
  15.        }  
  16.        public String getTitle() {  
  17.               return title;  
  18.        }  
  19.        public void setTitle(String title) {  
  20.               this.title = title;  
  21.        }  
  22.        public double getPrice() {  
  23.               return price;  
  24.        }  
  25.        public void setPrice(double price) {  
  26.               this.price = price;  
  27.        }  
  28. }  

然后创建另外一个类, Student, 该类有一个学员姓名属性 name ,另外,因为每个学员可以选择一门课程学习,那么就是说, 每个Student对象,会有一个Course对象 ,即 Course应该作为Student的一个属性存在 ,即 Student 关联 Course 。那么,会有如下声明:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public class Student {  
  2.     private String name;  
  3.     //1.关联关系:Student关联Course  
  4.     private Course course;  
  5.     public Student(String name) {  
  6.        super();  
  7.        this.name = name;  
  8.     }  
  9. }  
继续分析, Student应该有1 个行为,就是选择课程。要完成选择课程这个操作,必须得接受一个课程的对象,也就是说, Student选课 这个行为,必须 依赖于Course的一个对象 ,才能完成,所以 StudentCourse之间还存在依赖关系 ,继续完善上边代码:
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public class Student {  
  2.        private String name;  
  3.        //1.关联关系:Student关联Course  
  4.        private Course course;  
  5.         
  6.        public Student(String name) {  
  7.               super();  
  8.               this.name = name;  
  9.        }  
  10.         
  11.        //2.依赖关系:Student依赖Course  
  12.        public void chooseCourse(Course course){  
  13.               this.course=course;  
  14.        }  
  15.         
  16.        public Course getCourse(){  
  17.               return this.course;  
  18.        }  
  19. }  

很多初学者,对于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语言中的一些“数据容器”对象:数组、集合。

  • 19
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值