从IDEA角度来看懂UML图

前言

咱们目前已经学习了设计模式的7种设计原则。下面本该是直接进入具体的设计模式系列文章。java

可是呢在咱们学习设计模式以前咱们仍是有必要了解一下uml图。由于后续的设计模式文章不出意外应该会不少地方使用到uml图。若是你连uml图都看不懂的话,那么学习起来确定会有必定的难度。设计模式

因此说,这一节就做为承上启下的章节,让咱们来了解一下uml图吧。(固然若是你已经会UML图了,你彻底能够跳过这个章节)dom

介绍

按照惯例,咱们仍是要让你们知道什么是UML图:ide

UML有不少种类,什么用例图,静态结构图,动态行为图。工具

而做为java程序猿,咱们最关注的的仍是静态结构图中的类图便可,因此你只须要记住这一句话就能够了:UML图就是用来描述各个类,接口之间的关系图学习

咱们下面包括从此的UML类图都是用IntelliJ IDEA自带的类图工具来展现 ,每一个软件的画图风格会有一点点区别,可是核心的东西是不会变。idea

好的,我开始进入主题spa

类之间的关系

类与类之间的关系咱们能够分为如下几点:设计

因为咱们大部分时间使用的是idea自带的工具Uml Support来生成的uml图(快捷键:ctrl+alt+shift+u)。虽然大致类图线条的画法是相同的,可是IDEA生成的UML图的聚合关系和组合关系稍稍有点不一样,咱们接着往下看.3d

依赖

只要是在类中用到了对方,那么他们之间就存在依赖关系。

依赖关系包含其余5中关系。是最大的一层关系。

  1. 类中用到了对方
  2. 若是是类的成员属性
  3. 若是是方法的返回类型
  4. 是方法接收的参数类型
  5. 方法中使用到
//手机类
public class CellPhone {
    
    //手机能够玩游戏
    public void playGames(){
        System.out.println("play games");
    }
}


//普通人
public class Person {

    //买手机
    public CellPhone buyCellPhone(){
        return new CellPhone();
    }
    
    //买个手机玩游戏
    public void play(){
        CellPhone cellPhone = buyCellPhone();
        cellPhone.playGames();
    }
}

泛化

泛化关系实际上就是继承关系,他是依赖关系的特例(真子集)。

  1. 泛化关系实际上就是继承关系
  2. 若是A类继承了B类,咱们就说A和B存在泛化关系
//Person表明人
public class Person {

}

//Man表明男人
public class Man extends  Person{
    
}

实现

实现关系实际上就是A类实现B接口,他是依赖关系的特例(真子集)。

//Dao接口
public interface Dao {

}
//Dao实现
public class DaoImpl implements  Dao {
    
}

关联、聚合、组合

为何把这三个放在一块儿呢?

由于三者在代码上的表现相同,只是语意上有所差异。

1 关联:

类与类之间的联系,关系具备多重性,如:

“1”(表示有且仅有一个)

“0...”(表示0个或者多个)

“0,1”(表示0个或者一个)

“n...m”(表示n到 m个均可以)

“m...*”(表示至少m个)

2 聚合:

部分能够离开总体单独存在,举一个例子。学校类中有一个学生类。当咱们建立一个学校类的时候,可能由于刚创办,尚未学生。因此学生类是能够不存在的。不影响学校类的建立。他是依赖关系的特例(真子集)。

3 组合:

总体和部分同生共死,部分脱离总体会变得毫无心义,强调同生共死的一致的生命周期。

例如学生类中的身份证证类。每一个学生确定都会有身份证。在学生类被实例化成功之后,身份证类也被实例化成功。学生类是不能脱离身份证类单独存在的。他是依赖关系的特例(真子集)。

//学校
public class School {
    public List<Student> studnets;
}


//学生
public class Student {
   private IdentityCard identityCard = new IdentityCard(); //组合关系,建立student的时候也建立了身份证
}

//身份证
public class IdentityCard {
   private String id = UUID.randomUUID().toString();
}

一个学校有不少个学生,一个学生只有一个身份证。因此上面三个类的UML图以下:

首先咱们来看实线箭头,箭头方向指的是依赖的方向。School箭头指向Student标注1 * 表示:一个学校有多个学生。

Student的实线箭头指向IdentityCard而且标注的是1 1表示:一个学生只有一个学校和一个身份证。

而后咱们看菱形图。正常来讲,聚合关系应该是空心的菱形图,组合关系才是实心的菱形图,可是IDEA的集成工具将聚合和依赖关系都以实心菱形图来表示。

按照标准的uml图来讲,student和school之间应该是空心的菱形图。IdentityCard与Student才是实线的菱形图。

总结

虽说idea的画法有点不一样,为了他的便利性咱们也忍了。就比如大肠的功能虽然很脏,可是为了它的美味我能仍受,而且享受它。

好了,UNL图就到这里了,咱们前期铺垫了那么多,从下一节开始终于进入了主题,具体的设计模式系列。

相关文章
相关标签/搜索