java概念之类关系-依赖,泛化,关联,聚合,组合,实现

  • 2017年11月9日
  • Java

// 类与类之间由弱到强关系是:    没关系 > 依赖 > 关联 > 聚合 > 组合。
/**
 * 一)依赖
 * 1. 依赖关系是一种使用关系,大多数情况下体现在:一个类的方法中,使用另一个类的对象作为参数。
 * 2. UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。
 * 3. 	依赖关系有以下三种情况:
 * 	- A类是B类中的(某个方法的)局部变量
 * 	- A类是B类方法中的一个参数
 * 	- A类向B类发送消息,从而影响B类发生变化
 */
public class Driver{  
    public void drive(Car car){  
        car.move();  
    }  
    ……  
}  

public class Car{  
    public void move(){  
        ......  
    }  
    ……  
}

1339063909_4768.png


/**
 * 二)泛化
 * 1. A是B和C的父类,B,C具有公共类(父类)A,说明A是B,C的一般化(概括,也称泛化)
 * 2. 泛化关系(Generalization)也就是继承关系,用于描述父类与子类之间的关系,父类又称作基类或超类,子类又称作派生类。
 * 3. 在UML中,泛化关系用带空心三角形的直线来表示
 *    - 子类与父类应该完全一致,父类所具有的属性、操作,子类应该都有
 *    - 子类中除了与父类一致的信息以外,还包括额外的信息
 *    - 可以使用父类的实例的地方,也可以使用子类的实例
 */
 public class Person {
	protected String name;
	protected int age;

	public void move(){  
        ……  
    }

	public void say(){  
        ……  
    }
}

public class Student extends Person {
	private String studentNo;

	public void study() {  
        ……  
    }
}

1339064113_3688.png


/**
 * 三)关联
 * 1. 体现的是两个类之间的一种强依赖关系,关联关系是长期性的而不是临时性的,而且双方的关系一般是平等的
 * 2. 代码层面一般是在一个类A中,将另一个类B的对象作为该类A的全局变量
 * 3. 在UML类图中,用实线/实线箭头连接有关联的对象所对应的类(以下的代码为双向关联,下图为单项关联)
 * 4. 关联关系有几种: 双向关联、单向关联、自关联、重数性关联
 * 详情参考:http://www.cnblogs.com/LUO77/p/5785374.html
 */
public class Customer {  
    private Product[] products;  
    ……  
}  
public class Product {  
    private Customer customer;  
    ……  
}

1339064543_2384.png


/**
 * 四)聚合
 * 1. 关联关系的一种特例, 是强的关联关系,聚合关系表示整体与部分的关系,通常在定义一个整体类后,再去分析这个整体类的组成结构
 * 2. 聚合关系中两个类是处于不平等的层次, 一个表示整体, 一个表示部分,部分可以离开整体单独存在,但是整体不可以
 * 3. UML中,聚合关系用带空心菱形的直线表示,菱形指向整体
 */
public class Car {  
    private Engine engine;  
    
    public Car(Engine engine){  
        this.engine = engine;  
    }  
      
    public void setEngine(Engine engine) {  
        this.engine = engine;  
    }  
    ……  
}  

public class Engine {  
    ……  
}

1339065043_2919.png


/**
 * 五)组合
 * 1. 也是整体与部分的关系,但是整体与部分不可分开
 * 2. 组合关系中部分和整体具有统一的生存期,一旦整体对象不存在,则部分对象也将不存在,部分对象与整体对象是生死与共的关系
 * 3. 整体类可以控制成员类的生命周期,即成员类依赖于整体类
 * 4. UML中,组合关系用带实心菱形的直线表示,菱形指向整体
 */
public class Head {  
    private Mouth mouth;  
    public Head(){  
        mouth = new Mouth();  
    }  
    ……  
}

public class Mouth {  
    ……  
}

1339065205_1491.png


/**
 * 六)继承
 * 1. 是一种类与接口的关系,表示类是接口所有特征和行为的实现,实现是类与接口之间最常见的关系
 * 2. 在设计时一般没有争议性
 * 4. 带三角箭头的虚线,箭头指向接口
 */
public interface Vehicle {  
    public void move();  
} 
 
public class Ship implements Vehicle {  
    public void move() {  
        ……  
    }  
}  
public class Car implements Vehicle {  
    public void move() {  
        ……  
    }  
}

1339065434_3587.png

参考了两篇博客:

http://www.cnblogs.com/LUO77/p/5785374.html (比较粗略)

http://www.cnblogs.com/scevecn/p/5663369.html (更为浅显易懂)

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注