类与类之间的关系

来源:互联网 发布:农村淘宝加盟申请 编辑:程序博客网 时间:2024/06/07 15:38

类与类之间的关系对于理解面向对象具有很重要的作用,以前在面试的时候也经常被问到这个问题,在这里我就介绍一下。

 

类与类之间存在以下关系:          (1)泛化(Generalization)          (2)关联  (Association)                       (3)依赖(Dependency)          (4)聚合(Aggregation)

 

UML 图与应用代码例子:

 

1.泛化(Generalization)[泛化]

 

表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。一般化的关系是从子类指向父类的,与继承或实现的方法相反。

 

[具体表现]

 

父类父类实例=new 子类() [UML 图](图 1.1)

 

1.1 Animal 类与 Tiger 类,Dog类的泛化关系

 [代码表现]

1.  class Animal{}

2.  classTiger extendsAnimal{}

3.  public class Test 4.{

5.         publicvoid test()

6.          {

7.                  Animala=new Tiger();


8.          }

9. }

 

2.依赖(Dependency)[依赖]

 

对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。

 

[具体表现] 依赖关系表现在局部变量,方法的参数,以及对静态方法的调用 [现实例子]

比如说你要去拧螺丝,你是不是要借助(也就是依赖)螺丝刀(Screwdriver)来帮助你完成拧 螺丝(screw)的工作

 

[UML 表现](图 1.2)


1.2 Person 类与 Screwdriver 类的依赖关系 

[代码表现]

1. public class Person{ 2.   /** 拧螺丝 */

3.             public void screw(Screwdriverscrewdriver){

4.              screwdriver.screw();5. }

6. }

 

3.关联(Association)[关联]


对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应 关系时,这两个对象之间为关联关系。

 

[具体表现] 关联关系是使用实例变量来实现 [现实例子]

比如客户和订单,每个订单对应特定的客户,每个客户对应一些特定的订单;再例如公司和员工,每个公司对应一些特定的员工,每个员工对应一特定的公司

 

[UML 图] (图 1.3)


图 1.3 公司和员工的关联关系

[代码表现]

1.  publicclass Company{

2.             private Employeeemployee;

3.             public EmployeegetEmployee(){

4.              return employee; 5. }

6.             public void setEmployee(Employeeemployee){

7.              this.employee=employee;8.  }

9.         //公司运作

10.           public voidrun(){

11.                        employee.startWorking();

12.         }

13. }

 

(4)聚合(Aggregation[聚合]


当对象 A 被加入到对象B 中,成为对象 B 的组成部分时,对象 B 和对象 A 之间为聚集关系。聚合是关联关系的一种,是较强的关联关系,强调的是整体与部分之间的关系。

 

[具体表现]

 

与关联关系一样,聚合关系也是通过实例变量来实现这样关系的。关联关系和聚合关系来语法上是没办法区分的,从语义上才能更好的区分两者的区别。

 

[关联与聚合的区别]

 

(1)关联关系所涉及的两个对象是处在同一个层次上的。比如人和自行车就是一种关联关系,而不是聚合关系,因为人不是由自行车组成的。

 

聚合关系涉及的两个对象处于不平等的层次上,一个代表整体,一个代表部分。比如电脑和它的显示器、键盘、主板以及内存就是聚集关系,因为主板是电脑的组成部分。

 

(2)对于具有聚集关系(尤其是强聚集关系)的两个对象,整体对象会制约它的组成对象的 生命周期。部分类的对象不能单独存在,它的生命周期依赖于整体类的对象的生命周期,当整体消失,部分也就随之消失。比如张三的电脑被偷了,那么电脑的所有组件也不存在了, 除非张三事先把一些电脑的组件(比如硬盘和内存)拆了下来。

 

[UML 图](图 1.4)


图 1.3 电脑和组件的聚合关系

[代码表现]

1. public classComputer{

2.             private CPUcpu;

3.             public CPUgetCPU(){


4.                        returncpu;

5.          }

6.             public void setCPU(CPUcpu){

7.                        this.cpu=cpu;

8.          }

9.         //开启电脑

10.        publicvoid start(){

11.                //cpu 运作

12.                 cpu.run();

13.         }

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 如果淘宝小二判定退款不同意怎么办 商品退回卖家电话关机不收货怎么办 咸鱼等待卖家提供凭证超时怎么办 闲鱼等待卖家上传凭证超时怎么办 集运仓说有违禁品不能入库怎么办 转运停止寄到转运仓了怎么办 为什么阿里免费开店会被限制怎么办 e盘里的文件已经更改或移动怎么办 决斗之城忘了在那个服务器怎么办 ipad需要激活锁忘了id怎么办 小米非系统储存空间满了怎么办的 学生打暑假工被代理拖欠工资怎么办 华为畅享7plus进水了怎么办 华为荣耀6plus喇叭坏了怎么办 华为荣耀7x听筒声音小怎么办 华为智能手表开不了机了怎么办 华为手机重启忘记解锁密码怎么办 华为荣耀8手机开不开机怎么办 苹果5c手机开机密码忘了怎么办 魅蓝note6打王者掉帧怎么办 王者荣耀6月26日活动怎么办 荣耀v9玩刺激战场掉帧怎么办 华为荣耀v9进水开不开机怎么办 魅蓝2玩游戏超卡怎么办 华为手机突然黑屏开不了机怎么办 三星a9开机混合密码忘了怎么办 三星a9锁屏密码忘了怎么办 华为6x手机电源键失灵怎么办 华为手机更换主题后图标不变怎么办 手机屏幕上的拨打电话键没了怎么办 小米手机电用完了充不进去怎么办 华为微信分身版本过低怎么办 手机连接不上4g网络怎么办办 手机通话时老返回锁屏怎么办 小米手机指纹解锁按键不灵了怎么办 小米手机4s黑屏开不了机怎么办 手机老年机突然黑屏开不了机怎么办 苹果7P遮挡传感器就黑屏怎么办 手机被偷支付宝的钱被偷怎么办 oppo手机微信视频黑屏了怎么办 小米账号锁死插卡不显示卡怎么办