// 类与类之间由弱到强关系是: 没关系 > 依赖 > 关联 > 聚合 > 组合。 /** * 一)依赖 * 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(){ ...... } …… }
/** * 二)泛化 * 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() { …… } }
/** * 三)关联 * 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; …… }
/** * 四)聚合 * 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 { …… }
/** * 五)组合 * 1. 也是整体与部分的关系,但是整体与部分不可分开 * 2. 组合关系中部分和整体具有统一的生存期,一旦整体对象不存在,则部分对象也将不存在,部分对象与整体对象是生死与共的关系 * 3. 整体类可以控制成员类的生命周期,即成员类依赖于整体类 * 4. UML中,组合关系用带实心菱形的直线表示,菱形指向整体 */ public class Head { private Mouth mouth; public Head(){ mouth = new Mouth(); } …… } public class Mouth { …… }
/** * 六)继承 * 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() { …… } }
参考了两篇博客: