重温 UML 类图

2020-01-09  本文已影响0人  前行的乌龟
image

UML 肯定有人不熟悉,很多人知道但是不会看、会看不会写、会写写不熟练。这里我很肯定的告诉大家,UML 你用不好,用不熟练,那你就属于:不入流 的那层次。不管你是拿来装逼也好,还是真的设计复杂的功能、业务框架也好,UML 都是飞涨重要、起决定性的制约因素

我直说一点,你在公司里分享自己的功能、业务框架时,没有没 UML 那完全是2个概念,有的话既能装逼得满分,还能让技术大神认同你,上到领导,下到同事都认同你。效果就是这么明显,所以大家 UML 走起吧

去年我专门写过 UML 类图的文章,但是时间久远都忘的差不多了,当时纯自己查资料学习的,看的囫囵吐枣,其中关系不是非常清楚。这几天在B站上看到了:尚硅谷 韩顺平 图解Java设计模式 这个视频教程,老师讲的非常到位,以下就把 UML 类图其中的6大关系讲的非常清楚、透彻,很赞。其实吧完全不会的内容,要是能找到大机构或是N人的视频讲解,真的比纯自学强太多了,自学很多时候很多认识都是模糊。或是错误的。过写年再回头看,真想抽自己嘴巴,写的都是什么玩意儿...

设计模式视频链接:尚硅谷 韩顺平 图解Java设计模式

古人云:B站是个学习网站,真是诚不欺我呀!一入B站深似海,从此游戏是路人...


UML 图分类

UML 图按照功能可以这么分:

UML 所有的图如下:

类图是 UML 中最核心的图


UML 类图中类的6种关系

看着很多啊,但是就起根本,只有3种关系:

其他的关系大家可以这样理解:

ok,UML 中大家费解的类关系其实就是这么回事


泛化关系

泛化关系 就是 继承关系,这点就不用说了

UML 图标: 实线+空箭头

image

实现关系

实现关系 不用说了,就是实现接口

UML 图标: 虚线+空箭头

image

依赖关系

定义: 如果类中用到了对方,那么他们之间就存在依赖关系

举例 1: A 中有个成员变量 B,那么就可以说 A 依赖了 B

举例 2: Person 类依赖了 IDCard

class Person {
  IDCard _idCard;
}

class IDCard {
  String info;
}

UML 图标: 虚线+短箭头

image

特殊说明:

  1. 并不是只有成员变量才可以成为依赖,不管你在哪里用到的这个对象,都可以称为依赖,包括以下情境,只要满足下面的使用情境,就可以称为:依赖
    • 类中用到了对方
    • 类的成员属性
    • 方法的返回类型
    • 方法的参数类型
    • 方法中使用到
  1. 因为 关联依赖 的更详细说明, 关联 是专门描述成员属性的关系,所以依赖中所有涉及成员属性的地方更适合使用:关联、聚合、组合。因为大家看 UML 时看到依赖,那么肯定就可以排除成员属性的情况,一般多是方法使用到对方

关联关系

定义: 类于类之间的练习,是依赖关系的特列

特性: 关联关系是更具体的依赖关系,关联关系只描述:成员变量,也就是类和其成员属性之间的关系,可以是:单向一对一双向一对一。所以关联关系的核心是:导航性,通过关联关系我们只看 UML 就可以精确的了解类之间是怎么组织的了

UML 图标:

举例 1: 单向一对一

class Person {
  IDCard _idCard;
}

class IDCard {
  String info;
}
image

举例 2: 多向一对一

class Person {
  IDCard _idCard;
}

class IDCard {
  Person _person;
  String info;
}
image

聚合关系

定义: 整体和部分之间的关系

特性: 同样只描述成员属性、并且整体和部分是可以分开的,通常表现为那些通过 set 方法传递数值的成员变量,需要注意的是聚合关系是关联关系的特例

UML 图标:

举例: 电脑和鼠标、显示器就是典型的聚合关系,鼠标和键盘都是热插拔的,没有鼠标键盘不影响开机,电脑一样可以跑起来

class Computer {
  Keyborad _keyborad;
  Monitor _monitor;

  set keyborad(Keyborad value) {
    _keyborad = value;
  }

  set monitor(Monitor value) {
    _monitor = value;
  }
}

class Keyborad {}

class Monitor {}

组合关系

定义: 同样也是整体和部分之间的关系

特性: 同样只描述成员属性、整体和部分是不可以分开的,通常表现为那些通过 new 创建出来的成员变量,需要注意的是组合关系也是关联关系的特例。当然组合还表现为整体若是销毁了,组件也同样必须销毁

UML 图标:

举例: 电脑和机箱,机箱是电脑的核心所在,没有机箱就没有电脑一说,机箱是电脑永远不可或缺的部分,这就是典型的组合关系,

class Computer {
  Keyborad _keyborad;
  Monitor _monitor;
  Chassis _chassis = Chassis();

  set keyborad(Keyborad value) {
    _keyborad = value;
  }

  set monitor(Monitor value) {
    _monitor = value;
  }
}

class Keyborad {}

class Monitor {}

class Chassis {}
image

总结

  1. 虽然所有的类于属性自之间的关系都可以用依赖表示,但是对于成员变量来说,我们更倾向于使用关联、聚合、组合,剩下的可以用到依赖的时候就是方法传参,返回值的情况居多了,所以大家注意

  2. 实线比虚线更能表示类之间的紧密关系 - 继承用的实线,接口实线用的虚线,继承的关系可比接口关系近多了。依赖是虚线,关联是实现,自然描述作为成员属性的关联自然比只剩下方法可以参数返回值可以描述的依赖要和类的关系更加紧密了

  3. 实心表示不可分割,空心表示可以分离 - 这点从聚合和组合就能看出来,除了组合之外,谁用实心的了


上一篇 下一篇

猜你喜欢

热点阅读