用于描述系统中类(对象)本身的组成和类(对象)之间的各种静态关系。
六大关系:依赖、泛化(继承)、实现、关联、聚合与组合。
讲类之间的关系之前,先说一下类图中属性和方法前面的-
,+
,#
的代表的意思。
-
:public,公用的,对所有类可见+
:private,私有的,只对该类本身可用#
:protected,受保护的,对该类的子孙可见~
:package,包的,只对同一包声明的其他类可见 定义:只要在类中用到了对方,那么它们之间就存在依赖关系。如果没有对方,则编译不能通过。
类图示例:
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类。
泛化关系其实就是继承关系,它是依赖关系的特例。这个很简单,如果A类继承了B类,那么A和B就存在泛化关系。
类图示例:
public abstract class DaoSupport {
public void save(Object entity){ }
public void delete(Object id){ }
}
public class PersonServiceBean extends DaoSupport {
}
实现关系就是A类实现B接口,它是依赖关系的特例。
类图示例:
public interface PersonService {
public void delete(Integer id);
}
public class PersonServiceBean implements PersonService{
@Override
public void delete(Integer id) {
}
}
关联关系实际上就是类与类之间的联系,他是依赖关系的特例。关联具有导航性:即双向关系或单向关系;关系具有多重性:如”1“(表示有且仅有一个),”0…“(表示0个或者多个),“0,1”(表示0个或者1个),”n…m“(表示n到m个都可以),”m…*“(表示至少m个)。
示例:比如一个手机号对应一个人
类图:
public class Phone {
private User user;
}
public class User {
}
比如:人和身份证号之间的关系
类图:
public class Person {
private IDCard idCard;
}
public class IDCard {
private Person person;
}
从代码中我们可以很明确的看出单向一对一与双向一对一区别在:双向一对一是两个类中互相有对方的作为其成员变量,而单向一对一关系中只有一方有。
聚合关系表示的是整体与部分之间的关系,整体与部分可以分开。聚合关系是关联关系的特例,所以它具有关联的导航性和多重性。聚合关系使用带空心菱形的实现来表示。
类图示例:
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 {
}
组合关系也是整体与部分的关系,但是整体与部分不可以分开。即:整体与部分是同生共死的关系。 组合关系使用实心菱形表示。
类图示例:
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也要被删除。
因篇幅问题不能全部显示,请点此查看更多更全内容