一  :
类与类关系的UML图与代码表现_泛化

二 :

类与类关系的UML图与代码表现_父类_02

类与类关系的UML图与代码表现_关联关系_03

三 :

类与类关系的UML图与代码表现_生命周期_04

四 :

类与类关系的UML图与代码表现_关联关系_05

五 :

类与类关系的UML图与代码表现_聚合关系_06


类与类之间的关系对于理解面向对象具有很重要的作用,存在以下关系:
(1)泛化(Generalization)   :狗与动物  (空箭头)
(2)关联(Association)       :公司与员工有特定的某种关系 (实线)
(3)依赖(Dependency)    :人依赖螺丝刀 (虚线箭头)
(4)聚合(Aggregation)     : 电脑和CPU,主板 (菱形空间头)


类与类关系的UML图与代码表现_生命周期_07


类与类关系的UML图与代码表现_泛化_08

详细展开  :
一 .泛化(Generalization)
 表示类与类之间的继承关系接口与接口之间的继承关系或类对接口的实现关系
 一般泛化的关系是从子类指向父类的:
 父类 父类实例=new 子类()


类与类关系的UML图与代码表现_聚合关系_09

1类与类关系的UML图与代码表现_生命周期_10类与类关系的UML图与代码表现_聚合关系_11/** *//**
2类与类关系的UML图与代码表现_关联关系_12* 一个测试类
3类与类关系的UML图与代码表现_泛化_13*/

4类与类关系的UML图与代码表现_生命周期_10类与类关系的UML图与代码表现_聚合关系_11public class Demo类与类关系的UML图与代码表现_泛化_16{    
5类与类关系的UML图与代码表现_生命周期_17类与类关系的UML图与代码表现_泛化_18    public void test() 类与类关系的UML图与代码表现_泛化_16{
6类与类关系的UML图与代码表现_关联关系_12        //老虎的实例 也属于动物类型 
7类与类关系的UML图与代码表现_关联关系_12        Animal animal = new Tiger();  
8类与类关系的UML图与代码表现_父类_22    }
    
9类与类关系的UML图与代码表现_泛化_13}
 



1类与类关系的UML图与代码表现_生命周期_10类与类关系的UML图与代码表现_聚合关系_11/** *//**
2类与类关系的UML图与代码表现_关联关系_12*  动物类
3类与类关系的UML图与代码表现_泛化_13*/

4类与类关系的UML图与代码表现_生命周期_10类与类关系的UML图与代码表现_聚合关系_11public class Animal类与类关系的UML图与代码表现_泛化_16{
5类与类关系的UML图与代码表现_关联关系_12
6类与类关系的UML图与代码表现_泛化_13}
    


1类与类关系的UML图与代码表现_生命周期_10类与类关系的UML图与代码表现_聚合关系_11/** *//**
2类与类关系的UML图与代码表现_关联关系_12* 老虎类 
3类与类关系的UML图与代码表现_泛化_13*/

4类与类关系的UML图与代码表现_生命周期_10类与类关系的UML图与代码表现_聚合关系_11public class Tiger extends Animal类与类关系的UML图与代码表现_泛化_16{
5类与类关系的UML图与代码表现_关联关系_12
6类与类关系的UML图与代码表现_泛化_13}
  



二 .依赖(Dependency)

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

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

类与类关系的UML图与代码表现_聚合关系_42

 1类与类关系的UML图与代码表现_生命周期_10类与类关系的UML图与代码表现_聚合关系_11/** *//**
 2类与类关系的UML图与代码表现_关联关系_12 * 说明 :人 这个 类 
 3类与类关系的UML图与代码表现_泛化_13 */

 4类与类关系的UML图与代码表现_生命周期_10类与类关系的UML图与代码表现_聚合关系_11public class Person 类与类关系的UML图与代码表现_泛化_16{
 5类与类关系的UML图与代码表现_生命周期_17类与类关系的UML图与代码表现_泛化_18    /** *//**
 6类与类关系的UML图与代码表现_关联关系_12     * 人拥有的一个  拧螺丝  的  动作 依赖于螺丝刀这个类
 7类与类关系的UML图与代码表现_关联关系_12     * @param screwdriver :螺丝刀类
 8类与类关系的UML图与代码表现_父类_22     */

 9类与类关系的UML图与代码表现_生命周期_17类与类关系的UML图与代码表现_泛化_18     public void screw(Screwdriver screwdriver)类与类关系的UML图与代码表现_泛化_16
10类与类关系的UML图与代码表现_关联关系_12        //螺丝刀类提供了拧螺丝这个服务
11类与类关系的UML图与代码表现_关联关系_12        screwdriver.screw();    
12类与类关系的UML图与代码表现_父类_22    }
  
13类与类关系的UML图与代码表现_泛化_13}



三 .关联(Association)
对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系。
关联关系是使用实例变量来实现
比如客户和订单,每个订单对应特定的客户,每个客户对应一些特定的订单;再例如公司和员工,每个公司对应一些特定的员工,每个员工对应一特定的公司

类与类关系的UML图与代码表现_生命周期_62

 1类与类关系的UML图与代码表现_生命周期_10类与类关系的UML图与代码表现_聚合关系_11/** *//**
 2类与类关系的UML图与代码表现_关联关系_12 * 公司
 3类与类关系的UML图与代码表现_泛化_13 */

 4类与类关系的UML图与代码表现_生命周期_10类与类关系的UML图与代码表现_聚合关系_11public class Company类与类关系的UML图与代码表现_泛化_16{   
 5类与类关系的UML图与代码表现_关联关系_12    //员工
 6类与类关系的UML图与代码表现_关联关系_12    private Employee employee;
 7类与类关系的UML图与代码表现_关联关系_12
 8类与类关系的UML图与代码表现_生命周期_17类与类关系的UML图与代码表现_泛化_18    /** *//**
 9类与类关系的UML图与代码表现_关联关系_12     * 公司运作
10类与类关系的UML图与代码表现_父类_22      */

11类与类关系的UML图与代码表现_生命周期_17类与类关系的UML图与代码表现_泛化_18    public void run()类与类关系的UML图与代码表现_泛化_16{    
12类与类关系的UML图与代码表现_关联关系_12        employee.startWorking();    
13类与类关系的UML图与代码表现_父类_22    }

14类与类关系的UML图与代码表现_关联关系_12    
15类与类关系的UML图与代码表现_生命周期_17类与类关系的UML图与代码表现_泛化_18    public Employee getEmployee()类与类关系的UML图与代码表现_泛化_16{    
16类与类关系的UML图与代码表现_关联关系_12        return employee;    
17类与类关系的UML图与代码表现_父类_22    }
    
18类与类关系的UML图与代码表现_生命周期_17类与类关系的UML图与代码表现_泛化_18    public void setEmployee(Employee employee)类与类关系的UML图与代码表现_泛化_16{    
19类与类关系的UML图与代码表现_关联关系_12        this.employee=employee;    
20类与类关系的UML图与代码表现_父类_22    }
  
21类与类关系的UML图与代码表现_泛化_13}
 


四 : 聚合(Aggregation)
当对象A被加入到对象B中,成为对象B的组成部分时,对象B和对象A之间为聚集关系。聚合是关联关系的一种,是较强的关联关系,强调的是整体与部分之间的关系。
[关联与聚合的区别]
(1)关联关系所涉及的两个对象是处在同一个层次上的。比如人和自行车就是一种关联关系,而不是聚合关系,因为人不是由自行车组成的。
聚合关系涉及的两个对象处于不平等的层次上,一个代表整体,一个代表部分。比如电脑和它的显示器、键盘、主板以及内存就是聚集关系,因为主板是电脑的组成部分。
(2)对于具有聚集关系(尤其是强聚集关系)的两个对象,整体对象会制约它的组成对象的生命周期。部分类的对象不能单独存在,它的生命周期依赖于整体类的对象的生命周期,当整体消失,部分也就随之消失。比如张三的电脑被偷了,那么电脑的所有组件也不存在了,除非张三事先把一些电脑的组件(比如硬盘和内存)拆了下来。

类与类关系的UML图与代码表现_父类_94

 1类与类关系的UML图与代码表现_生命周期_10类与类关系的UML图与代码表现_聚合关系_11public class Computer类与类关系的UML图与代码表现_泛化_16{    
 2类与类关系的UML图与代码表现_关联关系_12    private CPU cpu;    
 3类与类关系的UML图与代码表现_生命周期_17类与类关系的UML图与代码表现_泛化_18    public CPU getCPU()类与类关系的UML图与代码表现_泛化_16{    
 4类与类关系的UML图与代码表现_关联关系_12        return cpu;    
 5类与类关系的UML图与代码表现_父类_22    }
    
 6类与类关系的UML图与代码表现_生命周期_17类与类关系的UML图与代码表现_泛化_18    public void setCPU(CPU cpu)类与类关系的UML图与代码表现_泛化_16{    
 7类与类关系的UML图与代码表现_关联关系_12        this.cpu=cpu;    
 8类与类关系的UML图与代码表现_父类_22    }
    
 9类与类关系的UML图与代码表现_关联关系_12    //开启电脑    
10类与类关系的UML图与代码表现_生命周期_17类与类关系的UML图与代码表现_泛化_18    public void start()类与类关系的UML图与代码表现_泛化_16{    
11类与类关系的UML图与代码表现_关联关系_12        //cpu运作    
12类与类关系的UML图与代码表现_关联关系_12        cpu.run();    
13类与类关系的UML图与代码表现_父类_22    }
    
14类与类关系的UML图与代码表现_泛化_13}