类与类关系的UML图与代码表现

类与类关系的UML图与代码表现
 
2008-12-19 来源:blogjava.net
 

一 :

二 :

三 :

四 :

五 :

类与类之间的关系对于理解面向对象具有很重要的作用,存在以下关系:

(1)泛化(Generalization) :狗与动物 (空箭头)

(2)关联(Association) :公司与员工有特定的某种关系 (实线)

(3)依赖(Dependency) :人依赖螺丝刀 (虚线箭头)

(4)聚合(Aggregation) : 电脑和CPU,主板 (菱形空间头)

详细展开 :

一 .泛化(Generalization)

表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。

一般泛化的关系是从子类指向父类的:

父类 父类实例=new 子类()

1 /**
2*  动物类
3*/

4 public   class  Animal {
5
6}
    

1 /**
2* 老虎类 
3*/

4 public   class  Tiger  extends  Animal {
5
6}
  

1 /**
2* 一个测试类
3*/

4 public   class  Demo {    
5    public void test()  {
6        //老虎的实例  也属于动物类型 
7        Animal animal = new Tiger();  
8    }
    
9}
 

二 .依赖(Dependency)

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

下面这个例子显然属于后者 :人要做一个拧螺丝的动作,他就要依赖于 螺丝刀对象,因为只有螺丝刀对象才提供拧螺丝的服务 。

 1 /**
 2 * 说明 :人 这个 类 
 3 */

 4 public   class  Person  {
 5    /**
 6     * 人拥有的一个  拧螺丝  的  动作  依赖于螺丝刀这个类
 7     * @param screwdriver :螺丝刀类
 8     */

 9     public void screw (Screwdriver screwdriver)

10        //螺丝刀类提供了 拧螺丝这个服务
11        screwdriver.screw();    
12    }
  
13 }

三 .关联(Association)

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

关联关系是使用实例变量来实现

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

 1 /**
 2 * 公司
 3 */

 4 public   class  Company {   
 5    //员工
 6    private Employee employee;
 7
 8    /**
 9     * 公司运作
10      */

11    public void run()
{    
12        employee.startWorking();    
13    }

14     
15      public  Employee getEmployee() {    
16        return employee;    
17    }
    
18      public   void  setEmployee(Employee employee) {    
19        this.employee=employee;    
20    }
  
21

四 : 聚合(Aggregation)

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

[关联与聚合的区别]

(1)关联关系所涉及的两个对象是处在同一个层次上的。比如人和自行车就是一种关联关系,而不是聚合关系,因为人不是由自行 车组成的。
聚合关系涉及的两个对象处于不平等的层次上,一个代表整体,一个代表部分。比如电脑和它的显示器、键盘、主 板以及内存就是聚集关系,因为主板是电脑的组成部分。

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

 1 public   class  Computer {    
 4        return cpu;    
 5    }
    
 6      public   void  setCPU(CPU cpu) {    
 7        this.cpu=cpu;    
 8    }
    
 9      //开启电脑     
10      public   void  start() {    
11        //cpu运作     
12        cpu.run ();    
13    }
    
14 }   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值