一、类图定义

        用于描述系统中类(对象)本身的组成和类(对象)之间的各种静态关系。

二、类之间的关系

        六大关系:依赖、泛化(继承)、实现、关联、聚合与组合。
        讲类之间的关系之前,先说一下类图中属性和方法前面的-+#的代表的意思。

  • -:public,公用的,对所有类可见
  • +:private,私有的,只对该类本身可用
  • #:protected,受保护的,对该类的子孙可见
  • ~:package,包的,只对同一包声明的其他类可见
1、依赖关系(Dependence)

        定义:只要在类中用到了对方,那么它们之间就存在依赖关系。如果没有对方,则编译不能通过。

类图示例:

Android类关系图 类图 关系_Android类关系图


代码示例:

public class PersonServiceBean {
    private PersonDao personDao;
    
    //这里只是用于理解依赖关系,没有具体实现
    public void save(Person person){ }
    
    public IDCard getIDCard(Integer personid){
        return null;
    }
    
    public void modify(){
    	//注意:局部变量是类对象,不符合迪米特法则,这里只是用于理解依赖关系
        Department department=new Department();
    }
}
public class PersonDao {
}
public class IDCard {
}
public class Person {
}
public class Department {
}

属于依赖关系的几种情况(以A类和B类举例说明):

  • A类中用到了B类
  • B类是A类的成员属性
  • B类作为A类的方法的返回类型
  • B类是A类方法中的参数类型
  • A类方法中用到B类

以上几种情况都属于A类依赖B类。

2、泛化关系(generalization)

        泛化关系其实就是继承关系,它是依赖关系的特例。这个很简单,如果A类继承了B类,那么A和B就存在泛化关系。

类图示例:

Android类关系图 类图 关系_一对一_02


代码示例:

public abstract class DaoSupport {
    public void save(Object entity){    }
    public void delete(Object id){    }
}
public class PersonServiceBean extends DaoSupport {

}
3、实现关系(Implementation)

        实现关系就是A类实现B接口,它是依赖关系的特例。

类图示例:

Android类关系图 类图 关系_Android类关系图_03


代码示例:

public interface PersonService {
    public void delete(Integer id);
}
public class PersonServiceBean implements PersonService{

    @Override
    public void delete(Integer id) {

    }
}
4、关联关系(Association)

        关联关系实际上就是类与类之间的联系,他是依赖关系的特例。关联具有导航性:即双向关系或单向关系;关系具有多重性:如”1“(表示有且仅有一个),”0…“(表示0个或者多个),“0,1”(表示0个或者1个),”n…m“(表示n到m个都可以),”m…*“(表示至少m个)。

4.1、单向一对一关系

示例:比如一个手机号对应一个人

类图:

Android类关系图 类图 关系_依赖关系_04


代码:

public class Phone {
    private User user;
}
public class User {
}
4.2、双向一对一关系

比如:人和身份证号之间的关系

类图:

Android类关系图 类图 关系_类图_05


代码:

public class Person {
    private IDCard idCard;
}
public class IDCard {
    private Person person;
}

        从代码中我们可以很明确的看出单向一对一与双向一对一区别在:双向一对一是两个类中互相有对方的作为其成员变量,而单向一对一关系中只有一方有。

5、聚合关系(Aggregation)

        聚合关系表示的是整体与部分之间的关系,整体与部分可以分开。聚合关系是关联关系的特例,所以它具有关联的导航性和多重性。聚合关系使用带空心菱形的实现来表示。

类图示例:

Android类关系图 类图 关系_Android类关系图_06


代码示例:

public class Computer {
    private Mouse mouse;
    private Monitor monitor;

    public void setMonitor(Monitor monitor) {
        this.monitor = monitor;
    }
    
    public void setMouse(Mouse mouse) {
        this.mouse = mouse;
    }
}
public class Mouse {
}
public class Monitor {
}
6、组合关系(Composition)

        组合关系也是整体与部分的关系,但是整体与部分不可以分开即:整体与部分是同生共死的关系。 组合关系使用实心菱形表示。

类图示例:

Android类关系图 类图 关系_类图_07


代码示例:

public class Computer {
    private Mouse mouse=new Mouse();
    private Monitor monitor=new Monitor();
}
public class Mouse {
}
public class Monitor {
}

        从上面的例子说明整体与部分不可分开的关系,即当Conputer被创建时,Mouse与Monitor也同时被创建了;当Computer被销毁时,Mouse与Monitor也被销毁了。这样的关系就是组合关系。
        另外、我们平时学习的时候,数据库中的级联删除 也属于组合关系,即当删除A的时候B也要被删除。