从IDEA角度来看懂UML图

Posted Java面试那些事儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从IDEA角度来看懂UML图相关的知识,希望对你有一定的参考价值。

前语:不要为了读文章而读文章,一定要带着问题来读文章,勤思考。

作者:正号先生   来源:http://1t.click/afbH
# 前言

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


但是呢在我们学习设计模式之前我们还是有必要了解一下uml图。因为后续的设计模式文章不出意外应该会很多地方使用到uml图。如果你连uml图都看不懂的话,那么学习起来肯定会有一定的难度。


所以说,这一节就作为承上启下的章节,让我们来了解一下uml图吧。(当然如果你已经会UML图了,你完全可以跳过这个章节)


# 介绍


按照惯例,我们还是要让大家知道什么是UML图:


UML有很多种类,什么用例图,静态结构图,动态行为图。


而作为java程序猿,我们最关注的的还是静态结构图中的类图即可,所以你只需要记住这一句话就可以了:UML图就是用来描述各个类,接口之间的关系图。


我们下面包括今后的UML类图都是用IntelliJ IDEA自带的类图工具来展示 ,每个软件的画图风格会有一点点区别,但是核心的东西是不会变。


好的,我开始进入主题


# 类之间的关系


类与类之间的关系我们可以分为以下几点:
从IDEA角度来看懂UML图
由于我们大部分时间使用的是idea自带的工具Uml Support来生成的uml图(快捷键:ctrl+alt+shift+u)。虽然大体类图线条的画法是相同的,但是IDEA生成的UML图的聚合关系和组合关系稍稍有点不同,我们接着往下看.


# 依赖


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


依赖关系包含其他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(); } }
从IDEA角度来看懂UML图

# 泛化


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


1.泛化关系实际上就是继承关系


2.如果A类继承了B类,我们就说A和B存在泛化关系
//Person代表人public class Person {}//Man代表男人public class Man extends Person{ }
 
   
   
 
从IDEA角度来看懂UML图


# 实现


实现关系实际上就是A类实现B接口,他是依赖关系的特例(真子集)
  
    
    
  
//Dao接口 public interface Dao {
} //Dao实现 public class DaoImpl implements Dao { }
从IDEA角度来看懂UML图


# 关联、聚合、组合


为什么把这三个放在一起呢?

因为三者在代码上的表现相同,只是语意上有所差别。


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的画法有点不同,为了他的便利性我们也忍了。就好比大肠的功能虽然很脏,但是为了它的美味我能仍受,并且享受它。

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

热文推荐



同时,分享一份Java面试资料给大家,覆盖了算法题目、常见面试题、JVM、锁、高并发、反射、Spring原理、微服务、Zookeeper、数据库、数据结构等等。
获取方式:点“在看”,关注公众号并回复 面试 领取。

以上是关于从IDEA角度来看懂UML图的主要内容,如果未能解决你的问题,请参考以下文章

UML复习回忆

如何从Visual Studio中的UML类图生成C#源代码

UML图之类图总结

IDEA 如何生成UML类图 - 转

IDEA 如何生成UML类图 - 转

UML类图自动生成,太爽了